mysql引擎Innodb和Myisam對比介紹和優缺點


一.myisam引擎
    1.mysql默認引擎,不支持事務*
    2.表級鎖定,更新時,鎖定機制是整張表被鎖定,其它連接無法更新表的數據,效率比較低下.鎖的機制成本很少,但大大降低了併發性能*
    3.讀寫互相阻塞,寫的時候阻塞讀,讀的時候也阻塞寫,但讀與讀之間不阻塞*
    4.只對索引進行緩存,雖然key_buffer可以大幅提高性能,減少磁盤IO,但對數據不緩存
    5.適合讀業務比較多的生產環境,比如BLOG等,讀的速度比較快.
    6.佔用資源比較少.服務器硬件不好時.可以考慮使用
    7.數據恢復沒有innodb引擎恢復的完美
    8.支持全文索引,不支持外鍵約束
二.mysiam引擎應用場景:
    1.不需要事務支持的場景,讀數據多的網站.
    2.併發相對較低的業務,因爲表級鎖定的機制限制
    3.數據修改相對較少的業務.阻塞問題
    4.對數據要求一致性不高的業務.
三.myisam引擎優化:
    1.儘量索引,緩存機制
    2.調整讀寫優先級
    3.啓用延遲插入.
    4.生產環境應用memcache緩存的多.Mysql本身的緩存爲用少

四.innodb引擎
    1.支持事務,四個級別的事務
    2.鎖定機制一般是行級鎖定.更新時只鎖定當前行,其它的行.沒關係,可以繼續讀寫.全表掃描.還是表鎖*
    3.讀寫阻塞與事務的隔離相關,讀取速度一般*
    4.可以緩存數據和索引,高效的緩存特性
    5.支持分區,表空間.
    5.適合讀寫業務比較多的環境,比如BBS等.一般的生產環境,也推薦用innodb.效率高
    6.服務器資源開銷大
    8.支持外鍵約束,不支持全文索引.
五.innodb應用場景
    1.需要事務支持的業務
    2.適合高併發的業務,行級鎖定.對高併發有很好的適應能力.但要確定查詢是通過索引完成.
    3.數據更新比較頻繁的場景.如BBS
    4.數據一致性要求較高
    5.硬件設備內存較大時,可以利用innodb較好的緩存能力來提高內存利用率.儘可能的減少磁盤IO
六.innodb調優
    1.my.cnf中參數
        [root@ser200 3306]# grep -i "innodb" my.cnf
        default_table_type = InnoDB
        innodb_additional_mem_pool_size = 4M
        innodb_buffer_pool_size = 32M            #Innodb核心參數,生產環境會給的很大.16G內存,雙實例,會給2G的緩存
        innodb_data_file_path = ibdata1:128M:autoextend
        innodb_file_io_threads = 4
        innodb_thread_concurrency = 8
        innodb_flush_log_at_trx_commit = 2
        innodb_log_buffer_size = 2M
        innodb_log_file_size = 4M
        innodb_log_files_in_group = 3
        innodb_max_dirty_pages_pct = 90
        innodb_lock_wait_timeout = 120
        innodb_file_per_table = 0

        生產環境16G內存服務器調優實例:
        default_table_type = InnoDB
        innodb_additional_mem_pool_size = 16M
        innodb_buffer_pool_size = 2048M            #Innodb核心參數,生產環境會給的很大.16G內存,雙實例,會給2G的緩存
        innodb_data_file_path = ibdata1:1024M:autoextend
        innodb_file_io_threads = 4
        innodb_thread_concurrency = 8
        innodb_flush_log_at_trx_commit = 2
        innodb_log_buffer_size = 16M
        innodb_log_file_size = 128M
        innodb_log_files_in_group = 3
        innodb_max_dirty_pages_pct = 90
        innodb_lock_wait_timeout = 120
        innodb_file_per_table = 0
    生產環境設置好參數,不怎麼會改動上面的參數.主要是SQL語句的調優,改上面參數作用有限.最核心優化是每個語句走索引
    2.主鍵儘可能小.包括索引
    3.儘量避免全表掃描.因爲會造成表鎖
    4.儘量緩存所有的數據和索引,提高響應速度,減少磁盤IO消耗
        發現:數據庫核心調優.讓用戶儘量去緩存上找數據,到內存找數據,少到磁盤上找數據.
    5.大批量小插入,儘量自己控制事務,而不要使用autocommit自己提交
    6.合理設置flush_log_at_trx_commit,不要過份追求安全性.

你有可能還對以下內容感興趣:

   1.mysql安裝方法和mysql主從配置原理介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章