mysql數據庫優化
1.硬件優化
a.64位cpu 一臺機器8-16顆cpu,(其他)2-4顆
b.內存 96-128g 3-4個實例(百度),(其他)32-64,2個實例
c.硬盤,數量越多越好,性能:ssd(高併發)>sas(普通線 上)>sata(線下)
raid 4塊盤:RAID0>RAID10>RAID5>RAID1
d.網卡 多塊網卡bond,以及buffer,tcp優化
2.軟件優化
操作系統:64位
軟件:mysql 編譯優化
3.參數優化(my.cnf)
my.cnf優化的幅度很小,大部分是架構和sql語句的調優
innodb_buffer_pool_size=2048m物理內存的30%-50%
sort_buffer_size=2m 線程buffer,不能給太大
tmp_table_size=256m 臨時表
long_query_time=2 slow_log,超過兩秒的
skip-name-resolve 不加會遇到權限問題
思想:
監控:show global status\G查看命中率
調優工具:mysqlreport
4.sql語句的優化
a.索引優化
抓出慢sql,配置my.cnf(大於2s的,沒走索引的記錄下來)
long-slow-query=/data/3306/slow-log.log
慢查詢日誌分析工具:mysqldumpslow,mysqlsla,myprofi
按天輪詢:slow-log.log
b.每天晚上0點定時分析慢查詢,發到核心開發,DBA的郵箱
c.大的複雜的sql語句拆分成多個小的sql語句
子查詢,JOIN鏈表查詢,某個表4000萬條記錄
d.數據庫是存儲數據的地方,但不是計算的地方,拿到前端應用解決
e.搜索功能,LIKE'%老男孩%'一般不要用mysql數據庫
5.架構優化
1.業務拆分
2.數據庫前端加cache,例如:memcache(用戶登錄,商品查詢等等)
3.某些業務應用使用nosql持久化存儲,例如:memcachedb,redis(粉絲,關注,好友關係等等)
4.動態的數據靜態化。整個文件靜態化,頁面片段靜態化
5.數據庫集羣與讀寫分離。一主多從。通過程序或者dbproxy進行集羣讀寫分離
6.單表超過2000萬。拆庫拆表
6.流程,制度,安全優化
任何一次人爲數據庫記錄的更新,都要走一個流程:
a.人的流程:開發-->核心開發-->運維或DBA(確認)
b.測試流程:內網測試-->IDC測試-->線上執行
c.客戶端管理,phpmyadmin