Skip to main content

Troubleshoot MySQL performance on LINUX

Troubleshoot mysql performance on LINUX:

Execute following for mysql> prompt:

TEE /tmp/mysql_output.txt;
select benchmark(50000000,(1234*5678/37485-1298+8596^2)); #should take less than 20 seconds
show global variables;
show master logs;
show plugins;
show engines;
show global status;
show global status like '%ndb%';
show engine innodb status\G
show slave status\G
show engine innodb mutex;
show master status;
xa recover;
show full processlist;
/*!50503 select * from information_schema.innodb_trx */;
/*!50503 select * from performance_schema.threads */;
/*!50503 SELECT EVENT_NAME, SUM_TIMER_WAIT/1000000000 WAIT_MS, COUNT_STAR FROM performance_schema.events_waits_summary_global_by_event_name WHERE SUM_TIMER_WAIT > 0 AND EVENT_NAME LIKE 'wait/synch/mutex/innodb/%' ORDER BY SUM_TIMER_WAIT DESC, COUNT_STAR DESC */;
/*!50708 select * from sys.session */;
select sleep(60);
show global status;
show global status like '%ndb%';
show engine innodb status\G
show slave status\G
show engine innodb mutex;
show master status;
xa recover;
show full processlist;
/*!50503 select * from information_schema.innodb_trx */;
/*!50503 select * from performance_schema.threads */;
/*!50503 SELECT EVENT_NAME, SUM_TIMER_WAIT/1000000000 WAIT_MS, COUNT_STAR FROM performance_schema.events_waits_summary_global_by_event_name WHERE SUM_TIMER_WAIT > 0 AND EVENT_NAME LIKE 'wait/synch/mutex/innodb/%' ORDER BY SUM_TIMER_WAIT DESC, COUNT_STAR DESC */;
/*!50708 select * from sys.session */;
\s

select distinct(engine), count(*) from information_schema.tables where table_schema not in ('mysql', 'performance_schema', 'information_schema') group by engine;
NOTEE;


Execute following as root user from OS prompt:

script -c 'bash --norc' /tmp/linux_output.txt
PS1="\u@\H:\w [\t]\$ "
date
hostname
hostname -I
uname -a
dmidecode -s system-product-name
ls -1 /dev/disk/by-id/
lsb_release --all
uptime
df -Th
mount
for i in /sys/block/*/queue/scheduler; do echo "${i}"; cat ${i}; echo; done
lscpu
cat /proc/cpuinfo
ps axfww -o 'pid,user,rtprio=PR,ni,nlwp,vsz=VIRT,rss=RES,s,%cpu,%mem,time=TIME+,start,label,args' | grep -E 'mysql|ndb'
free -m
cat /proc/sys/vm/dirty_background_bytes
cat /proc/sys/vm/dirty_background_ratio
cat /proc/sys/vm/dirty_bytes
cat /proc/sys/vm/dirty_expire_centisecs
cat /proc/sys/vm/dirty_ratio
cat /proc/sys/vm/dirty_writeback_centisecs
cat /proc/vmstat
cat /proc/sys/vm/zone_reclaim_mode
cat /proc/interrupts
mpstat -P ALL 5 6
cat /proc/meminfo
cat /proc/buddyinfo
cat /proc/slabinfo
numactl -H
numastat -m
numastat -n
numastat mysqld
numactl --hardware
numastat -m
cat /sys/kernel/mm/*transparent_hugepage/enabled
sysctl -e fs.file-max
sysctl -e kernel.threads-max
getenforce
cat /etc/selinux/config
for i in `ls /proc/sys/net/ipv4/`; do echo $i; cat /proc/sys/net/ipv4/$i; done
echo "ifconfig @ date: $(date +'%s (%a %Y-%m-%d %H:%M:%S %Z/%:z)')"; ifconfig
cat /proc/buddyinfo
cat /proc/slabinfo
mpstat -A 1 4
grep ^Cached /proc/meminfo
grep -A 1 dirty /proc/vmstat
cat /proc/sys/vm/nr_pdflush_threads
iostat -x 1 4
vmstat 1 4
top -b -n 4 -d 1
echo "ifconfig @ date: $(date +'%s (%a %Y-%m-%d %H:%M:%S %Z/%:z)')"; ifconfig
netstat --statistics
netstat -rn
route -n
cat /proc/buddyinfo
ps axfww -o 'pid,user,rtprio=PR,ni,nlwp,vsz=VIRT,rss=RES,s,%cpu,%mem,time=TIME+,start,args'
# List all swapping processes
printf "%6s %-30s %10s\n" "PID" "Command" "Swap"; for file in /proc/*/status ; do awk 'BEGIN{pid=0; name=""; swap="";}; /^(Pid:|Name:|VmSwap:)/ {if ($1 == "Pid:") pid=$2; else if ($1 == "Name:") name=$2; else if ($1 == "VmSwap:" && $2 > 0) swap=sprintf("%8d %s", $2, $3);}; END{if (swap != "") printf "%5d %-30s %s\n", pid, name, swap}' $file; done | sort -k 3 -n -r
ulimit -a
for pid in $(pidof mysqld) $(pidof ndbd) $(pidof ndbmtd); do echo "Limits for pid = ${pid}"; echo "========================"; echo; cat /proc/${pid}/limits; echo; echo; done
dmesg
egrep -i "err|fault|mysql|ndb|denied|battery|blocked" /var/log/*
exit


Comments

Popular posts from this blog

MySQL InnoDB cluster troubleshooting | commands

Cluster Validation: select * from performance_schema.replication_group_members; All members should be online. select instance_name, mysql_server_uuid, addresses from  mysql_innodb_cluster_metadata.instances; All instances should return same value for mysql_server_uuid SELECT @@GTID_EXECUTED; All nodes should return same value Frequently use commands: mysql> SET SQL_LOG_BIN = 0;  mysql> stop group_replication; mysql> set global super_read_only=0; mysql> drop database mysql_innodb_cluster_metadata; mysql> RESET MASTER; mysql> RESET SLAVE ALL; JS > var cluster = dba.getCluster() JS > var cluster = dba.getCluster("<Cluster_name>") JS > var cluster = dba.createCluster('name') JS > cluster.removeInstance('root@<IP_Address>:<Port_No>',{force: true}) JS > cluster.addInstance('root@<IP add>,:<port>') JS > cluster.addInstance('root@ <IP add>,:<port> ') JS > dba.getC...

InnoDB cluster Remove Instance Force | Add InnoDB instance

InnoDB cluster environment UUID is different on node: To fix it stop group replication, remove instance (use force if require), add instance back Identify the node which is not in sync: Execute following SQL statement on each node and identify the node has different UUID on all nodes. mysql> select * from mysql_innodb_cluster_metadata.instances; Stop group replication: Stop group replication on the node which does not have same UUID on all nodes. mysql > stop GROUP_REPLICATION; Remove instances from cluster: Remove all secondary node from the cluster and add them back if require. $mysqlsh JS >\c root@<IP_Address>:<Port_No> JS > dba.getCluster().status() JS > dba.getCluster () <Cluster:cluster_name> JS > var cluster = dba.getCluster("cluster_name"); JS >  cluster.removeInstance('root@<IP_Address>:<Port_No>'); If you get "Cluster.removeInstance: Timeout reached waiting......" JS > cluster.removeInstance(...

Oracle E-Business Suite Online Patch Phases executing adop

Following description about Oracle E-Business Suite is high level and from documentation https://docs.oracle.com/cd/E26401_01/doc.122/e22954/T202991T531062.htm#5281339 for in depth and detail description refer it. The online patching cycle phases: Prepare Apply Finalize Cutover Cleanup Prepare phase: Start a new online patching cycle, Prepares the environment for patching. $ adop phase=prepare Apply phase: Applies the specified patches to the environment. Apply one or more patches to the patch edition. $ adop phase=apply patches=123456,789101 workers=8 Finalize phase: Performs any final steps required to make the system ready for cutover. Perform the final patching operations that can be executed while the application is still online. $ adop phase=finalize Cutover phase: Shuts down application tier services, makes the patch edition the new run edition, and then restarts application tier services. This is the only phase that involves a brief ...