mysql優化總結
1.數據庫的對象:
1)優化表的類型:
2) 數據庫表設計時候更小的占磁盤空間盡可能使用更小的整數類型.(mediumint就比int更合適)
3) 所有字段都得有默認值
4) 選擇合適表類型(InnoDB或者myisam)
2,優化sql語句:
1)通過show status了解各種sql的執行頻率
show status like 'Com_%'
了解 Com_select,Cominsert 的執行次數
2) 通過Explain分析低效的sql語句
3) 建立合適的索引
4) 通過show status like 'Handler%'查看索引的使用情況
handler_read_key表明索引效率的很高
Handler_read_rnd_key的值很高,表明查詢運行效率很低
5) 定期分析表和檢查表
analyze table test_table和check table test_table
然后查看Msg_text字段的值是否是ok
6)定期優化表 optimize table test_table
如果對表的字段varchar blob,text等進行了很多更改, 則撒花用
7) 優化 order by orgroup by等
3,鎖的問題
1) MyISAM為表級鎖
由于MyISAM寫進程優先獲得鎖,使得讀鎖請求靠后等待隊列
如果在大量更新操作的情況下,使得很難獲得讀鎖。從而造成阻塞。
所以MyIsam不適合做大量更新操作的原因
2 )INNODB的行鎖是基于索引實現,如果不通過索引訪問數據,Innodb會使用表鎖
4,MySQL server服務器配置優化:
1)使用show variables 了解服務器參數
2)show status 了解服務器運行狀態,如鎖等待情況,當前連接數等
3)影響mysql性能的重要參數:
key_buffer_size設置索引塊的緩存大小
table_cache數據庫打開表的緩存數量 ,每個連接進來,都會至少打開一個表緩存。因此
table_cache和max_connections有關, 例如 對于200個并行運行的連接,應該讓表的緩存至少是200 *N
N 是可以執行查詢的一個連接中的表的最大數
4) 還有innodb_buffer_pool_size等innodb參數的設置
5,磁盤io優化
1)使用磁盤陣列 RAID (廉價磁盤冗余陣列)
RAID就是按照一定的策略將數據分布到若干物理磁盤上,這樣不僅增強了數據存儲的可靠性,而且提高數 據讀寫的性能 (RAID有不能的級別)
1) 讀寫很頻繁的,可靠性要求也很高的,最好RAID 10
2) 數據讀很頻繁,寫相對較少的,對可靠性一定要求的,選擇RAID 5
3) 數據讀寫都很頻繁,但是可靠性要求不高的可以選擇RAID 0
2) 使用符號鏈接 分布I/O
MYSQL在默認的情況下,數據庫和數據表都存放在參數datadir定義的目錄下,這樣如果不使用RAID或者邏輯卷,
所有的數據都存放在一個磁盤設備上,無法發揮多磁盤并行讀寫的優勢
( ln -s /var/mysql/data/test /tmp/data/test)3) 禁止操作系統更新文件的atime屬性
6,應有的優化
1)減少對mysql的訪問,使用mem緩存等
2)負載均衡,復制分流查詢操作
利用mysql的主從復制,分流更新操作和查詢操作
1), 創建復制賬號:Gran replication slave on . to 'rel'@'10.0.1.2' identified by '123456'
2), 修改主服務器的配置my.conf 開啟binlog和設置server-id
3), 將主服務器的數據一致性恢復到從服務器,保證將要復制的數據時一只的,否則出問題
4), 在從服務器上修改配置my.conf
server-id=2
master-host=10.0.1.3
master-user='rel'
master-password='123456'
master-port='3306'
5), 從服務器啟動slave線程: start slave
show processlist 查看
3)分布式cluster 數據庫架構