您好,登錄后才能下訂單哦!
mysql中的innodb是什么?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
innodb簡介
InnoDB,是MySQL的數據庫引擎之一,現為MySQL的默認存儲引擎,為MySQL AB發布binary的標準之一。InnoDB由Innobase Oy公司所開發,2006年五月時由甲骨文公司并購。與傳統的ISAM與MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事務(Transaction)功能,類似于PostgreSQL。
詳細介紹
事務型數據庫的首選引擎,支持ACID事務,支持行級鎖定。InnoDB是為處理巨大數據量時的最大性能設計。InnoDB存儲引擎完全與MySQL服務器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩沖池。InnoDB存儲它的表&索引在一個表空間中,表空間可以包含數個文件(或原始磁盤分區)。這與MyISAM表不同,比如在MyISAM表中每個表被存在分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上。InnoDB默認地被包含在MySQL二進制分發中。Windows Essentials installer使InnoDB成為Windows上MySQL的默認表。
InnoDB存儲它的表&索引在一個表空間中,表空間可以包含數個文件(或原始磁盤分區)。這與MyISAM表不同,比如在MyISAM表中每個表被存在分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上。
性能技巧
1.如果 Unixtop或 Windows任務管理器(Task Manager)顯示服務的 CPU 占用率小于 70%,(shows that the CPU usage percentage with your workload is less than 70 %,)你的系統瓶頸可能在磁盤讀寫上。或許你提交了大量的事務,或者是緩沖池(buffer pool)太小了。將緩沖池設大點會有所幫助,但一定要注意不能大于物理內存的 80%。
2.在一個事務中包含幾個修改。如果事務對數據庫進行了修改,那么在這個事務提交時 InnoDB 必須刷新日志到磁盤上。因為硬盤的旋轉速度通常至多為 167 轉/秒,那么只要磁盤不欺騙操作系統,提交的事務數目限止也同樣為 167 次/秒·用戶。
3.如果掉失最近的幾個事務無所謂的話,可以在my.cnf文件中將參數innodb_flush_log_at_trx_commit設置為 0。InnoDB 無論如何總是嘗試一秒刷新(flush)一次日志,盡管刷新并不能得到保證。
4.將日志文件(log files)設大一點,使日志文件的總和正好與緩沖池(buffer pool)一樣大。當 InnoDB 用光日志文件的空間時,它不得不在一個時間點上將緩沖池內修改過的內容寫到磁盤上。 小的日志文件可能引起不必要的磁盤寫操作。但是大的日志文件的缺點就是在數據恢復時將占用較長的時間。
5.同樣 log buffer 盡量設大點,比如說 8 MB。
6.如果要存儲變長的字符串或字段可能會包含大量的 NULLs,請使用CHAR型字段代替VARCHAR。一個CHAR(n)字段總是使用 n bytes 來存儲數據,即使這個字符串很短或是一個 NULL 值。較小的表更加適合緩沖池同時能夠減少磁盤 I/O 。
7.(適合從 3.23.41 以上版本) 在某些版本的 Linux 和 Unixes 中,使用 Unixfsync或其它類似的方法將文件刷新到磁盤是異常地慢的。InnoDB 默認的方法就是fsync。如果你對數據庫系統的磁盤寫性能不能感到滿意,你可以嘗試在my.cnf中將innodb_flush_method設置為O_DSYNC,盡管O_DSYNC選項在多數的系統上看起來比較慢。
8.在向 InnoDB 導入數據時,請確認 MySQL 沒有打開autocommit=1。否則每個插入語句都要將 log 刷新到磁盤。在你的 SQL 導入文件的第一行加入
set autocommit=0;并在最后一行加入commit;
如果使用mysqldump選項--opt,你將會得到一個快速導入 InnoDB 表的轉儲(dump)文件,甚至可以不再使用上面所提的set autocommit=0; ... commit;。
9.小心 insert 集全的大回滾(roolback):在插入時 InnoDB 使用插入緩沖來減少磁盤 I/O,但在相應的回滾中卻沒有使用這樣的機制。一個 disk-bound rollback 可能會花費相應插入時間的 30 倍。如果發生一個失控的回滾,你可以查看第 6.1 章節的技巧來停止它。
10.同樣也要小心一個大的 disk-bound 的操作。使用DROP TABLE或TRUNCATE(從 MySQL-4.0 以上) 來清空一個表,而不要使用DELETE FROM yourtable。
關于mysql中的innodb是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。