mysql引擎和事務

2022-07-24 14:51:20 字數 2826 閱讀 1772

對於應用程式和使用者來說,同樣一張表的資料無論用什麼引擎來儲存,看到的資料都是一樣的,只是不同的引擎在功能、占用空間大小、讀取效能等方面可能有所差別。

mysql最常用的儲存引擎為innodb、myisam和全文索引

5.5.5以前預設儲存引擎為myisam,5.5.5及之後預設儲存引擎為innodb

mysql> show engines \g檢視當前資料庫系統支援的引擎

mysql5.5支援事務的引擎:innodb/ndb(集群的引擎)

對於myisam來說,每乙個表對應於磁碟上的三個檔案,這三個檔名稱相同,副檔名不同。

.frm檔案儲存表的定義(是伺服器而不是myisam引擎的一部分),.myd儲存表的資料,.myi是表的索引檔案(可參考mysql的系統庫mysql下的檔案)

特點:1.不支援事務

2.表級鎖定(更新時鎖定整個表),鎖定的成本小,但大大降低了併發效能

3.讀寫互相阻塞,不僅會在寫入的時候阻塞讀取,還會在讀取的時候阻塞寫入,但是讀不會阻塞另外的讀

4.只會快取索引不能緩衝資料,可以通過key_buffer_size快取索引,減少磁碟io,但是只會快取索引不會快取資料

5.讀取速度較快,占用資源相對少(功能相對弱,鎖的粒度大)

6.不支援外來鍵約束,但支援全文索引

7.mysql5.5.5預設的儲存引擎

適用的生產場景:單一對資料庫的操作(純讀或者純寫)可以使用

1.不需要事務支援的業務(例如轉賬、充值就不行)

2.一般為讀多或者寫多的**應用,讀寫都頻繁的場景不適合

3.讀寫併發相對較低的業務(純讀純寫高併發也可以)

4.資料修改相對較少的業務

5.以讀為主的業務,例如www、blog、資訊資料庫

6.對資料一致性要求不很高的業務

7.硬體資源相對較差的機器

調優精要:

1.設定合適的索引

2.調整讀寫優先順序,根據實際需要確保重要的操作更優先執行

3.啟用延遲插入改善大批量寫入效能(降低寫入頻率)

4.盡量順序操作,讓insert資料都寫入到尾部,減少阻塞

5.分解大的時間長的操作,降低單個操作的阻塞時間

6.降低併發數,某些高併發場景通過應用進行排隊佇列機制

7.對於相對靜態(更改不頻繁)的資料庫資料,充分利用query cache或者mamcached快取服務極大的提高訪問效率

8.count只有在全表掃瞄的時候高效,帶有其他條件的count都需要進行實際的資料訪問

9.可以把主從同步的主庫使用innodb,從庫使用myisam引擎(不推薦)

innodb

特點:1.支援事務

2.行級鎖定(更新時一般鎖定當前行),通過索引實現,如果進行全表掃瞄仍然會鎖全表與myisam相同,注意間隙鎖的影響

3.讀寫阻塞與事務隔離級別相關

4.具有高效的快取特性,能快取索引,也能快取資料

5.整個表和主鍵以cluster方式儲存,組成一棵平衡樹

6.所有secondary index都會儲存逐漸資訊

7.支援分割槽和表空間,類似oracle資料庫

8.支援外來鍵約束,5.5以前不支援全文索引,後續支援

9.與myisam相比對硬體資源要求相對較高

適用場景:

1.需要事務支援的業務

2.行級鎖定對高併發有很好的適應能力,但需要確保查詢通過索引完成

4.對資料一致性要求較高的業務,例如充值轉賬

5.硬體裝置記憶體大,可以利用innodb較好的快取能力來提高記憶體利用率,盡可能減少磁碟io

6.與myisam引擎相比,innodb引擎更消耗資源,速度沒有myisam快

調優精要:

1.主鍵盡可能小,避免給secondary index帶來過大壓力

2.避免全表掃瞄,否則會使用表鎖

3.盡可能快取所有的索引和資料,提高響應速度,減少磁碟io消耗

4.在大批量小插入的時候,盡量自己控制事務,而不要使用autocommit

4.合理設定innodb_flush_log_at_trx_commit,不要過度追求安全性

5.避免主鍵更新,這會帶來大量的資料移動

事務:邏輯上的一組sql語句操作,這組sql語句執行時要麼全部成功要麼全部失敗

事務的四大特性acid

原子性(atomicity):事務是乙個不可分割的單位,乙個事務中的所有sql操作要麼全部成功要麼全部失敗

一致性(consistency):事務發生前和發生後,事務的完整性必須保持一致

隔離性(isolation):當併發訪問資料庫時,乙個正在執行的事務在執行完畢前,對於其他會話是不可見的,多個併發事務之間的資料是互相隔離的(mysqldump時的引數--single-transaction)

永續性(durability):乙個事務一旦被提交,它對資料庫中的資料改變就是永久性的,如果出了錯誤,事務不允許撤銷,只能通過「補償性事務」

mysql資料庫的事務預設是自動提交的。如果想多條sql在乙個事務中執行,則需要使用事務進行處理。如果開啟乙個事務沒有提交,mysql會自動回滾事務,或者手動使用rollback回滾。

start transaction開啟事務

rollback回滾事務

commit提交事務

mysql> show variables like '%commit%';結果為on或者off(預設為on)

表建立後修改引擎的方法

1.mysql語句修改

mysql> alter table test2 engine=myisam;

2.使用sed對備份內容進行引擎替換,即用mysqldump備份,使用sed對引擎做替換,再匯入替換後的備份語句

3.linux命令mysql_convert_table_format修改

mysql事務及引擎

資料庫事務介紹 簡單的說,事務就是指邏輯上的一組sql操作,組成這組操作的sql語句,執行時要麼全成功,要麼全失敗。事務的四大特性 acid 1.原子性 atomicity 事務是不可分割的乙個單位,事務中的所有sql操作要麼都發生,要麼都不發生。2.一致性 consistency 事務發生前和發生...

MySQL 事務 儲存引擎和三正規化

三正規化儲存引擎 參考mysql邏輯上的一組操作,這些操作要麼全做要麼全不做,是乙個不可分割的工作單位。事務只和dml語句 insert delete update 有關。儲存引擎指表的型別及表在計算機上的儲存方式。myisam 占用空間小,有較高的插入 查詢速度,不支援事務 也不支援外來鍵。對事務...

mysql儲存引擎,事務,事務回滾

檢視已有表的使用儲存引擎 show create table 表名 g 檢視當前資料庫的預設儲存引擎和可提供的儲存引擎 show engines 修改儲存引擎 step1 修改配置檔案 etc my.cnf default storage engine 儲存引擎 step2 重啟mysqld服務 修...