MYSQL 優化總結

1.數據庫的對象
    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 數據庫架構
發佈了20 篇原創文章 · 獲贊 51 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章