MySQL 5 7 Innodb事務物件快取

2021-09-23 19:04:55 字數 1247 閱讀 6815

在5.7中,innodb引入了乙個pool結構來專門做物件快取重用。這可能會提公升短連線場景的效能。本文的目的主要是理清其**結構。當然主要是作為乙個c++小白,學習下c++的一些**style。

**版本:mysql 5.7.5

我們這裡以事務物件池為例

1.初始化的過程如下:

trx_pools = ut_new_nokey(trx_pools_t(max_trx_block_size));

trx_pools 全域性變數,也是操作trx pool的介面,型別為trx_pools_t

其定義如下:

typedef pooltrx_pool_t;

對應:

template

其中,trx_t表示事務物件型別,trxfactory封裝了事務的初始化和,trxpoollock封裝了pool鎖的建立,銷毀,加鎖,解鎖。

typedef poolmanager;

poolmanager封裝了池的管理方法

顯然,這裡涉及到多個類:

pool 及 poolmanager 是共用的類

trxfactory 和 trxpoollock, trxpoolmanagerlock是trx pool私有的類。

–trxfactory用於定義池中事務物件的初始化和銷毀動作;

–trxpoollock用於定義每個池中物件的互斥鎖操作

–由於pool的管理結構支援多個pool物件, trxpoolmanagerlock用於互斥操作增pool物件。支援多個pool物件的目的是分拆單個pool物件的鎖開銷,因為從pool中獲取和返還物件,都是需要排他鎖的。

相關類的關係如下圖所示:

#獲取乙個事務物件:trx_pools->get();

#釋放乙個事務物件:trx_pools->free(trx);通過trx指標計算出element的起始位址,然後將element放回pool

2.除了事務物件外,為每個事務物件也快取了一部分記錄鎖物件,表鎖物件

new(&trx->lock.rec_pool) lock_pool_t();

new(&trx->lock.table_pool) lock_pool_t();

每個事務物件快取8個記錄鎖物件(rec_lock_cache)和 8個表級鎖物件(table_lock_cache),不過這些結構相對上面的就簡單多了,只是簡單的vector

mysql 5 7 InnoDB 新增全文索引

首先要確定是mysql 5.6以上 否則不支援 innodb全文索引 fulltext 我使用的環境是mysql5.7 新增步驟如下 修改變數 大部分人都這麼改,看情況吧 新增索引 其他的就是檢視索引情況和驗證索引情況 首先先檢視現在的變數情況 show variables like ft valu...

mysql日誌 innodb事務

1 binlog 歸檔日誌 server所有 sync binlog 表示每次binlog 都同步磁碟 2 redolog innodb儲存引擎特有 innodb flush log at trx commit 1 代表每次redolog都同步到磁碟 3 undolog 組成版本鏈 mvcc und...

MySQL 5 7 優化InnoDB配置

mysql show variables like innodb 這個是innodb最重要的引數,主要作用是快取innodb表的索引,資料,插入資料時的緩衝,預設值為128m。如果是乙個專用db伺服器,那麼它可以佔到記憶體的70 80 並不是設定的越大越好。設定的過大,會導致system的swap空...