mysql優化總結

fmms 12年前發布 | 17K 次閱讀 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 數據庫架構

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!