官术网_书友最值得收藏!

2.7.1 參數影響

這個參數一共有三種取值,除了官方文檔,筆者覺得源碼中的如下注釋也比較清晰,如表2-2所示。

表2-2

img

這里的read_set和write_set分別代表columns_before_image位圖和columns_after_image位圖。我們在解釋DML Event的時候多次提到,這里對應一下,如下。

INSERT語句:記錄變更的after_image(插入的數據),內部使用write_set過濾。

DELETE語句:記錄變更的before_image(刪除的數據),內部使用read_set過濾。

UPDATE語句:記錄變更的before_image和after_image(修改的數據),內部使用read_set和write_set過濾。

本節主要討論MINIMAL和FULL設置。對于上面源碼的說明進行如下解釋。

MINIMAL:對于before_image,只會記錄主鍵或者第一個非空的唯一鍵到Event。而對于after_image,只會記錄需要變更的字段,包括自增值。

FULL:對于前映像和后映像,都記錄全部字段。注意,不僅某些閃回工具依賴這種設置,記錄全部字段對于我們診斷問題、修復數據也有幫助。同時,設置為FULL可以讓從庫在選擇索引的時候有更多的選擇,提高從庫應用Event的效率。關于從庫數據的查找將會在4.6節詳細解釋。如果沒有對磁盤空間的要求,那么本參數最好設置為FULL。

注意,如果表中沒有主鍵也沒有非空的唯一鍵,那么即便是設置參數 binlog_row_image 為MINIMAL,before_image也會記錄全部的字段值。我們來看看THD::binlog_prepare_row_images函數中的源碼片段,如下。

如果table->s->primary_key < MAX_KEY條件不滿足,即沒有找到主鍵或者非空唯一鍵,則read_set不會改變,將保持記錄全字段。

主站蜘蛛池模板: 遵义县| 阳谷县| 辉南县| 黎平县| 木里| 成都市| 昭通市| 合阳县| 清镇市| 惠来县| 弋阳县| 富蕴县| 揭阳市| 罗山县| 肃北| 大埔县| 阜阳市| 鸡泽县| 大足县| 南通市| 老河口市| 天等县| 突泉县| 共和县| 青岛市| 弥渡县| 晋江市| 永平县| 湟源县| 藁城市| 广东省| 景宁| 屏南县| 新蔡县| 澄迈县| 翼城县| 什邡市| 惠来县| 宜良县| 祥云县| 亚东县|