1)優化表的類型:
2) 數據庫表設計時候更小的佔磁盤空間儘可能使用更小的整數類型.(mediumint就比int更合適)
3) 所有字段都得有默認值
4) 選擇合適表類型(InnoDB或者myisam)
2,優化sql語句:
1)通過show status瞭解各種sql的執行頻率
show status like 'Com_%'
瞭解 Com_select,Com_insert 的執行次數
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 數據庫架構