1.硬件優化
a.cpu 一臺機器8-16顆8-16G 2-4顆
b.內存 96G-128G 3-4個實例 32-64G 跑2個實例
c.disk數量越多越好,性能:ssd (高併發)> sas(普通業務線上) >sata
raid10>raid5>raid1
d.網卡,多塊網卡bond,以及buffer,tcp優化
2.參數優化
優化的幅度很小,大部分 架構以及SQL語句優化
監控 生產參數時一般情況下參數
show global status\G
工具 mysqlreport
3.sql優化
a.索引的優化
1)抓出慢SQL,配置my.cnf
long_query_time = 1
log-slow-queries = /data/3306/slow.log
按天輪詢slow-log.log
2)慢查詢日誌分析工具--mysqlsla(推薦)
b.大的複雜的SQL語句拆分成多個小的SQL語句
c.數據庫是存儲數據的地方,但不是計算數據的地方
d.搜索功能,一般不用MYSQL數據庫
4.架構優化
1.業務拆分,搜索功能,like ‘%全職%’,一般不要用數據庫
2.數據庫前端使用nosql持久化存儲
3.數據庫集羣與讀寫分離,一主多從,通過程序進行讀寫分離
4.單表超過2000萬,拆庫拆表
5.動態數據靜態化。
流程、制度、安全優化
如何一次人爲數據庫記錄的更新,都要走一個流程
a.人的流程 開發--->核心開發--->運維或DBA
網站打開慢
1)show full processlist:
2)慢查詢語句
long_query_time = 1
log-slow-queries = /data/3306/slow.log
a、數據庫負載高,有慢查詢,做聯合索引案例,查看錶結構,有沒有建索引
b、帶寬滿了,磁盤滿了,連接數消耗完了
c、數據庫中像 Like’%×××%’ 這樣的語句特別多,導致數據庫負載高,這樣的語句對於數據庫沒有太大的優化餘地
登錄數據庫查看 show full processlist:
mysql -uroot -p’111’ -e “show full processlist” | grep -vi sleep 數據庫中像 Like’%×××%’ 這樣的語句特別多,導致數據庫負載高,這樣的語句對於數據庫沒有太大的優化餘地
優化方法
1)業務上實現先登錄再搜索,減少搜索次數
2) 分析web日誌的ip,如果有大量頻繁的搜索,一般是爬蟲在爬你的網站(Awstats是一個免費非常簡潔而且強大有個性的統計工具)
3) 配置多個從庫,程序上實現讀寫分離
4) 在數據庫前端加上緩存服務器
tips
mysqldump大於50g就用xtarbackup
mysqlbinlog -d aaa mysql-bin.0020 > aaa.sql (生成的sql都是aaa庫的)