84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
有什么好的优化方案
光阴似箭催人老,日月如移越少年。
工欲善其事必先利其器,我說一下思路
想法:1、確定高負載的類型htop,dstat指令看負載高是CPU還是IO2、監控具體的sql語句,是insert update 還是delete導致高負載3、檢查mysql日誌4、檢查硬體問題
dstat
可以看到具體是哪個使用者哪個行程佔用了相關係統資源,目前CPU、記憶體誰在使用
[root@cc ~]# dstat -l -m -r -c --top-io --top-mem --top-cpu --io/total- ------memory-usage----- --most-expensive- ----most-expensive---- -most-expensive- read writ| used buff cach free| memory process | i/o process | cpu process 1.90 267 |3399M 178M 3892M 400M|php-fpm: poo 372M|init 1682k 647k|flush-202:0 0.1 0 72.0 |3399M 178M 3892M 400M|php-fpm: poo 372M|php-fpm: po 10k 143k|php-fpm: pool2.0 0 8.00 |3399M 178M 3892M 399M|php-fpm: poo 372M|nginx: work 228k 229k|php-fpm: pool0.5 0 88.0 |3399M 178M 3892M 399M|php-fpm: poo 372M|nginx: work 102k 166k|php-fpm: pool 11 0 38.0 |3399M 178M 3892M 399M|php-fpm: poo 372M|php-fpm: po 787k 650B|php-fpm: pool4.8 0 0 |3399M 178M 3892M 399M|php-fpm: poo 372M|php-fpm: po 788k 723B|php-fpm: pool1.8 0 140 |3400M 178M 3892M 399M|php-fpm: poo 372M|nginx: work 38k 154k|php-fpm: pool1.2 0 12.0 |3400M 178M 3892M 399M|php-fpm: poo 372M|nginx: work 178k 364k|php-fpm: pool1.5 0 0 |3400M 178M 3892M 399M|php-fpm: poo 372M|nginx: work 758k 639k|php-fpm: pool1.5 0 12.0 |3400M 178M 3892M 399M|php-fpm: poo 372M|nginx: work 773k 616k|php-fpm: pool2.0 6.00 0 |3401M 178M 3892M 398M|php-fpm: poo 372M|nginx: work 994k 688k|nginx: worker1.5 0 272 |3401M 178M 3892M 398M|php-fpm: poo 372M|nginx: work 388k 422k|php-fpm: pool1.5 0 0 |3400M 178M 3893M 398M|php-fpm: poo 372M|nginx: work 483k 548k|php-fpm: pool1.8 0 4.00 |3400M 178M 3893M 398M|php-fpm: poo 372M|php-fpm: po 787k 650B|php-fpm: pool1.5 0 12.0 |3400M 178M 3893M 398M|php-fpm: poo 372M|nginx: work 223k 323k|php-fpm: pool1.5 0 0 |3400M 178M 3893M 398M|php-fpm: poo 372M|nginx: work 371k 474k|php-fpm: pool7.8
htop
htop是top的增強版,更直覺
[root@cc ~]# htop 1 [||||||||||| 12.4%] 2 [||||||||| 9.5%] 3 [| 1.0%] 4 [|| 1.9%] Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||3394/7869MB] Swp[|||||||||||||| 75/478MB] Tasks: 71, 12 thr; 2 running Load average: 0.39 0.39 0.31 Uptime: 526 days(!), 17:36:38 PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 1 root 20 0 19232 396 248 S 0.0 0.0 0:01.86 /sbin/init 30752 root 20 0 52532 72 56 S 0.0 0.0 0:00.16 ├─ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf 24301 root 20 0 193M 3268 1600 S 0.0 0.0 1:41.43 ├─ /usr/sbin/snmpd -LS0-6d -Lf /dev/null -p /var/run/snmpd.pid 21361 root 20 0 902M 6500 1308 S 0.0 0.1 0:07.16 ├─ php-fpm: master process (/etc/php-fpm.conf) 28627 www 20 0 962M 202M 138M S 0.0 2.6 0:34.46 │ ├─ php-fpm: pool www-c 27537 www 20 0 965M 236M 171M R 1.4 3.0 1:19.64 │ ├─ php-fpm: pool www-c 27449 www 20 0 961M 251M 189M S 0.0 3.2 1:35.54 │ ├─ php-fpm: pool www-a 26442 www 20 0 962M 280M 217M S 0.0 3.6 2:29.71 │ ├─ php-fpm: pool www-a 26310 www 20 0 917M 251M 234M S 1.9 3.2 2:46.45 │ ├─ php-fpm: pool www-a 26162 www 20 0 962M 297M 233M S 0.0 3.8 2:37.50 │ ├─ php-fpm: pool www-b 26147 www 20 0 924M 258M 233M S 0.0 3.3 2:38.37 │ ├─ php-fpm: pool www-c 25717 www 20 0 965M 302M 238M S 0.0 3.8 2:54.50 │ ├─ php-fpm: pool www-c 24585 www 20 0 964M 324M 260M S 0.0 4.1 4:15.20 │ ├─ php-fpm: pool www-b
tcpdump
抓取mysql套件分析,一般抓3306埠的資料
[root@cc ~]# tcpdump -i eth0 -A -s 3000 port 3306 > ~/sql.log
然後使用awk,sort,wc 等指令進行分析
或
[root@cc ~]# tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e ' while(<>) { chomp; next if /^[^ ]+[ ]*$/; if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) { if (defined $q) { print "$qn"; } $q=$_; } else { $_ =~ s/^[ t]+//; $q.=" $_"; } }'
就可以看出最繁忙的sql語句了
strace
檢查系統呼叫是否有問題,進程是否阻塞,是否有Broken pipe
[root@cc ~]# strace -p 26578
pt-query-digest
分析mysql慢日誌,查看哪些sql語句最耗時
[root@cc ~]# pt-query-digest slow.logs # 390ms USER TIME, 10ms system TIME, 15.67M rss, 105.84M vsz # CURRENT DATE: Thu DEC 29 13:22:42 2014 # Hostname: test # Files: slow.log # Overall: 776 total, 11 UNIQUE, 0.00 QPS, 0.00x concurrency _____________ # TIME range: 2011-09-10 04:03:19 TO 2011-12-29 05:02:51 # Attribute total MIN MAX avg 95% stddev median # ============ ======= ======= ======= ======= ======= ======= ======= # EXEC TIME 5657s 2s 33s 7s 23s 6s 5s # LOCK TIME 33s 0 19s 43ms 98us 715ms 38us # ROWS sent 323.38k 0 107.36k 426.73 0.99 6.35k 0 # ROWS examine 323.39k 0 107.36k 426.74 0 6.35k 0 # Query SIZE 217.95k 38 562 287.61 420.77 81.78 284.79
show processlist
查看系統到底在做什麼
mysql> show full processlist; +-----------+---------------+---------------------+---------------------+---------+------+---------------+---------------------------+ | Id | User | Host | db | Command | Time | State | Info | +-----------+---------------+---------------------+---------------------+---------+------+---------------+---------------------------+ | 184498848 | testdb_rr1356 | 10.11.211.120:61343 | testdb_rr1356_db121 | Sleep | 1384 | | NULL | | 184508740 | testdb_rr1356 | 10.11.211.120:11809 | testdb_rr1356_db121 | Sleep | 87 | | NULL | | 184509415 | testdb_rr1356 | 10.11.211.120:12760 | testdb_rr1356_db121 | Query | 0 | NULL | show full processlist | | 184509451 | testdb_rr1356 | 10.11.211.120:12804 | testdb_rr1356_db121 | Sleep | 10 | | NULL | | 184509528 | testdb_rr1356 | 10.11.211.120:12919 | testdb_rr1356_db121 | Query | 0 | freeing items | DESCRIBE test_channel |
檢查mysql配置參數是否有問題,造成大量的IO或高CPU操作
innodb_flush_log_at_trx_commit 、innodb_buffer_pool_size 、key_buffer_size 等重要參數
mysql> show variables like '%innodb%'; +---------------------------------+----------------------------+ | Variable_name | Value | +---------------------------------+----------------------------+ | have_innodb | YES | | ignore_builtin_innodb | ON | | innodb_adaptive_flushing | ON | | innodb_adaptive_hash_index | ON | | innodb_additional_mem_pool_size | 2097152 | | innodb_autoextend_increment | 8 | | innodb_autoinc_lock_mode | 1 | | innodb_buffer_pool_size | 2013265920 | | innodb_change_buffering | inserts | | innodb_checksums | ON |
透過show engine innodb status查看目前事務,記憶體使用
mysql> show engine innodb status \G LATEST DETECTED DEADLOCK ------------------------ 150731 10:36:50 *** (1) TRANSACTION: TRANSACTION EBFBBEC, ACTIVE 0 sec, process no 20691, OS thread id 47345217033984 inserting mysql tables in use 1, locked 1 LOCK WAIT 5 lock struct(s), heap size 1248, 4 row lock(s), undo log entries 2 MySQL thread id 143249904, query id 1286731854 10.135.21.120 tybuser2014 update #此处具体sql省略 ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 2058485760; in additional pool allocated 0 Dictionary memory allocated 819282 Buffer pool size 122879 Free buffers 97599 Database pages 24313 Old database pages 8954 Modified db pages 7 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 6, not young 0 0.00 youngs/s, 0.00 non-youngs/s Pages read 1049, created 41853, written 30401604 0.00 reads/s, 0.00 creates/s, 1.75 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 24313, unzip_LRU len: 0 I/O sum[45]:cur[0], unzip sum[0]:cur[0]
最後透過zabbix或cacti等監控來查看IO、CPU、MEMORY、磁碟等是否有異常
這樣基本上就可以把問題找出來了
僅供參考,當然,不同的DBA肯定還有其他更好的方式
Io? Cpu?開下慢查詢日誌
根據你這個提問的方式,我也可以衍生出一堆提問來,你自己體會下
標題:我的網站訪問很慢,怎麼優化? 問:有什麼好的思路
標題:我想讓網站的效能加倍,怎麼實現? 問:有人知道嗎
標題:我的伺服器設定失敗,怎麼回事? 問題:大家幫幫我
請問,你能回答這些問題嗎?沒有任何細節,一句話的問題能吸引好的答案嗎?然後別人還要猜你的意圖,這樣浪費了很多時間。
工欲善其事必先利其器,我說一下思路
想法:
1、確定高負載的類型htop,dstat指令看負載高是CPU還是IO
2、監控具體的sql語句,是insert update 還是delete導致高負載
3、檢查mysql日誌
4、檢查硬體問題
dstat
可以看到具體是哪個使用者哪個行程佔用了相關係統資源,目前CPU、記憶體誰在使用
htop
htop是top的增強版,更直覺
tcpdump
抓取mysql套件分析,一般抓3306埠的資料
然後使用awk,sort,wc 等指令進行分析
或
就可以看出最繁忙的sql語句了
strace
檢查系統呼叫是否有問題,進程是否阻塞,是否有Broken pipe
pt-query-digest
分析mysql慢日誌,查看哪些sql語句最耗時
show processlist
查看系統到底在做什麼
檢查mysql配置參數是否有問題,造成大量的IO或高CPU操作
innodb_flush_log_at_trx_commit 、innodb_buffer_pool_size 、key_buffer_size 等重要參數
透過show engine innodb status查看目前事務,記憶體使用
最後透過zabbix或cacti等監控來查看IO、CPU、MEMORY、磁碟等是否有異常
這樣基本上就可以把問題找出來了
僅供參考,當然,不同的DBA肯定還有其他更好的方式
Io? Cpu?開下慢查詢日誌
根據你這個提問的方式,我也可以衍生出一堆提問來,你自己體會下
標題:我的網站訪問很慢,怎麼優化?
問:有什麼好的思路
標題:我想讓網站的效能加倍,怎麼實現?
問:有人知道嗎
標題:我的伺服器設定失敗,怎麼回事?
問題:大家幫幫我
請問,你能回答這些問題嗎?沒有任何細節,一句話的問題能吸引好的答案嗎?然後別人還要猜你的意圖,這樣浪費了很多時間。