mysql網站打開慢問題排查&數據庫優化

1.訪問慢問題

1.1 應用反應mysql網站打開慢前端

top查看CPU是不是mysql佔得較多;mysql

uptime查看負載狀況;web

進入到mysql庫中,查看進程數:show (full) processlist;sql

1.2 開啓慢查詢日誌數據庫

long_query_time=1緩存

log-slow-queries = /data/3306/slow.log安全

1.3 explain某一條語句,看是否走索引ruby

索引建議建在惟一值較多(即重複值少的)的列上,若三個列都不少,則可基於三個列創建聯合索引。服務器

對於數據庫中像like‘%XXX%’這樣的語句特別多,會致使數據庫負載,可是沒有太大的優化餘地(如百度的搜索欄界面),這種狀況下的優化方案思路:mysql優化

1)從業務上實現用戶登陸後再搜索,可減小搜索次數,從而減輕數據庫服務壓力

2)若是有大量頻繁的搜索,多是爬蟲在爬,這時須要分析web日誌,封掉其IP

3)配置多個主從同步,程序上實現讀寫分離(最好讓like這種查詢去從庫查),減輕主庫讀寫壓力

4)在數據庫前端增長memcached緩存服務器

5)能夠經過搜索服務Sphinx實現搜索

6)能夠利用c,ruby開發程序,實現每日讀庫計算搜索索引,保存在服務器上提供搜索,而後每五分鐘多一個從庫作一次增量

2.mysql優化

2.1 硬件優化

CPU:一臺服務器8-16顆

內存:96G-128G跑3-4個實例,32G-64G跑2個實例

硬盤:數量越多越好,性能:ssd(高併發) > sas(普通業務線上) > sata(線下) 

          raid 以4塊盤爲例:raid0>raid10>raid5>raid1

網卡:多塊網卡bond

以及buffer、tcp優化

2.2 軟件優化

操做系統:x86_64

軟件:mysql編譯優化

2.3 my.cnf裏參數的優化

#優化的幅度很小,大部分要靠架構以及SQL語句優化

幾個參數的解釋:

innodb_buffer_pool_size建議設置爲物理內存的1/3-1/2,不要超過50%

sort_buffer_size、read_buffer_size這種線程buffer不要給大了,通常2M便可

query_cache_size=64M 也不建議配置太大

key_buffer_size=32M 若是用於myisam引擎的話建議給大一點,用於索引

skip-name-resolve                                             #若沒有此項,在show processlist 時會顯示權限不足

max_allowed_packet 服務器和客戶端之間最大能發送的可能信息包,設的大備份會快

wait_time 服務器在關閉它以前在一個鏈接上等待行動的秒數

interactive_timeout 服務器在關閉它以前在一個交互鏈接上等待行動的秒數

也可經過監控查看生產參數的情況:

show global status\G  

工具:MySQLreport     ----wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.604.tar.gz      wget http://cpan.uwinnipeg.ca/cpan/authors/id/T/TI/TIMB/DBI-1.605.tar.gz

tar zxvf DBI-1.605.tar.gz    cd DBI-1.605    more README   perl Makefile.PL    make   make test     make install

另外還有一個分析參數的工具:wget http://www.day32.com/MySQL/tuning-primer.sh

./mysqlreport --user=root --password=oldboy123 --socket=/data/3306/mysql.sock

2.4 SQL語句優化

索引優化:

1)抓出慢SQL,配置my.cnf   long_query_time=2   log-slow-queries=/data/3306/slow-log.log

2)慢查詢日誌分析工具-----mysqlsla

     mysqldumpslow,mysqlsla,myprofi,mysql-explain-slow-log,mysqllogfilter;

大的複雜的SQL語句拆分紅多個小的SQL語句;

子查詢,JOIN連表查詢;

數據庫是存儲數據的地方,但不是計算數據的地方,把計算的部分拿到前端應用解決;

搜索功能通常不要用mysql數據庫,能夠用單獨搜索的工具,或加memcached緩存等;

3.架構優化

業務拆分:如搜索功能的拆分

某些業務應用使用nosql持久化存儲,如memcachedb,Redis,ttserver,粉絲關注、好友關係等

數據庫前端必須加cache,如memcached,用戶登陸、商品查詢等

動態的數據靜態化,整個文件靜態化,頁面片斷靜態化

數據庫集羣與讀寫分離,一主多從等,經過程序或dbproxy進行集羣讀寫分離

單表超過2000萬,拆庫拆表,人工拆表拆庫(登陸、商品、訂單)

4.流程、制度、安全優化

任何一次人爲數據庫記錄的更新,都要走相應的流程:

人:開發--->核心開發--->運維或DBA

測試:內網測試--->IDC測試--->線上執行

客戶端管理:PHPMYADMIN

 

2018年11月7日

祝好!

相關文章
相關標籤/搜索