這篇文章將為大家詳細講解有關(guān)MySQL中存儲引擎InnoDB配置與使用的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)是專業(yè)的瀾滄網(wǎng)站建設公司,瀾滄接單;提供成都網(wǎng)站設計、做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行瀾滄網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!innodb 通過多版本并發(fā)控制(MVCC)來獲得高并發(fā)性,并且實現(xiàn)了SQL標準的4種隔離級別,默認為REPEATABLE
級別。同時,使用一種被稱為next-key locking
的策略來避免幻讀(phantom
)現(xiàn)象的產(chǎn)生。除此之外,InnoDB存儲引擎還提供了插入緩沖(insert buffer
)、二次讀寫(double write
)、自適應哈希索引(adaptive hash index
)、預讀(read ahead
)等高性能和高可用的功能。
如何設置InnoDB為默認引擎:
1. 查看mysql存儲引擎情況: mysql>show engines。 InnoDB | YES,說明此mysql數(shù)據(jù)庫服務器支持InnoDB引擎。
2. 設置InnoDB為默認引擎:在配置文件my.ini中的 [mysqld] 下面加入default-storage-engine=INNODB
3. 重啟mysql服務器
4. 登錄mysql數(shù)據(jù)庫,mysql>show engines。如果出現(xiàn) InnoDB |DEFAULT,則表示設置InnoDB為默認引擎成功。
InnoDB常用配置參數(shù):
#InnoDB存儲數(shù)據(jù)字典、內(nèi)部數(shù)據(jù)結(jié)構(gòu)的緩沖池,16MB 已經(jīng)足夠大了。 innodb_additional_mem_pool_size = 16M #InnoDB用于緩存數(shù)據(jù)、索引、鎖、插入緩沖、數(shù)據(jù)字典等 #如果是專用的DB服務器,且以InnoDB引擎為主的場景,通??稍O置物理內(nèi)存的50% #如果是非專用DB服務器,可以先嘗試設置成內(nèi)存的1/4,如果有問題再調(diào)整 #默認值是8M,非常坑X,這也是導致很多人覺得InnoDB不如MyISAM好用的緣故 innodb_buffer_pool_size = 4G #InnoDB共享表空間初始化大小,默認是 10MB,也非??覺,改成 1GB,并且自動擴展 innodb_data_file_path = ibdata1:1G:autoextend #如果不了解本選項,建議設置為1,能較好保護數(shù)據(jù)可靠性,對性能有一定影響,但可控 innodb_flush_log_at_trx_commit = 1 #InnoDB的log buffer,通常設置為 64MB 就足夠了 innodb_log_buffer_size = 64M #InnoDB redo log大小,通常設置256MB 就足夠了 innodb_log_file_size = 256M #InnoDB redo log文件組,通常設置為 2 就足夠了 innodb_log_files_in_group = 2 #啟用InnoDB的獨立表空間模式,便于管理 innodb_file_per_table = 1 #啟用InnoDB的status file,便于管理員查看以及監(jiān)控等 innodb_status_file = 1 #設置事務隔離級別為 READ-COMMITED,提高事務效率,通常都滿足事務一致性要求 transaction_isolation = READ-COMMITTED 其他配置選項也需要注意: #設置大并發(fā)連接數(shù),如果前端程序是PHP,可適當加大,但不可過大 #如果前端程序采用連接池,可適當調(diào)小,避免連接數(shù)過大 max_connections = 60 #大連接錯誤次數(shù),可適當加大,防止頻繁連接錯誤后,前端host被mysql拒絕掉 max_connect_errors = 100000 #設置慢查詢閥值,建議設置最小的 1 秒 long_query_time = 1 #設置臨時表大值,這是每次連接都會分配,不宜設置過大 max_heap_table_size 和 tmp_table_size 要設置一樣大 max_heap_table_size = 96M tmp_table_size = 96M #每個連接都會分配的一些排序、連接等緩沖,一般設置為 2MB 就足夠了 sort_buffer_size = 2M join_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 2M #建議關(guān)閉query cache,有些時候?qū)π阅芊炊且环N損害 query_cache_size = 0 #如果是以InnoDB引擎為主的DB,專用于MyISAM引擎的 key_buffer_size 可以設置較小,8MB 已足夠 #如果是以MyISAM引擎為主,可設置較大,但不能超過4G #在這里,強烈建議不使用MyISAM引擎,默認都是用InnoDB引擎 key_buffer_size = 8M #設置連接超時閥值,如果前端程序采用短連接,建議縮短這2個值 #如果前端程序采用長連接,可直接注釋掉這兩個選項,是用默認配置(8小時) interactive_timeout = 120 wait_timeout = 120
幾個關(guān)于InnoDB引擎數(shù)據(jù)表設計相關(guān)的建議:
1. 所有InnoDB數(shù)據(jù)表都創(chuàng)建一個和業(yè)務無關(guān)的自增數(shù)字型作為主鍵,對保證性能很有幫助;
2. 杜絕使用text/blob,確實需要使用的,盡可能拆分出去成一個獨立的表;
3. 時間戳建議使用 TIMESTAMP 類型存儲;
4. IPV4 地址建議用 INT UNSIGNED 類型存儲;
5. 性別等非是即非的邏輯,建議采用 TINYINT 存儲,而不是 CHAR(1);
6. 存儲較長文本內(nèi)容時,建議采用JSON/BSON格式存儲;
InnoDB鎖類型
InnoDB存儲引擎實現(xiàn)如下兩種標準的行級鎖
共享鎖(S Lock), 允許事務讀一行數(shù)據(jù)
排他鎖(X Lock),允許事務刪除或更新一行數(shù)據(jù)
共享鎖和排他鎖的兼容
注意:
(1)S鎖和X鎖都是行鎖,兼容是指對同一記錄(row)鎖的兼容性.
(2)事務T1已經(jīng)獲得行R的共享鎖,另一個事務T2可以立即獲得行R的共享鎖,這種情況稱為鎖兼容。事務T3想獲得行R的排他鎖,則必須等待事務T1、T2釋放行R上的共享鎖,這種情況成為鎖的不兼容.
關(guān)于“MySQL中存儲引擎InnoDB配置與使用的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。