binlog在併發狀態下的記錄

2022-08-24 07:21:12 字數 3117 閱讀 5446

前兩天看binlog發現個奇怪的地方:對於position靠後的記錄,timestamp卻比之前的記錄還要小。當時覺得大概和併發有關係

後來做了個實驗

開兩個session

對於session1:

begin;

insert into t1 values(1);

insert into t1 values(3);

insert into t1 values(5);

此時在session2:

begin;

insert into t1 values(2);

insert into t1 values(4);

commit;

然後再在session1:

insert into t1 values(7);

commit;

觀察binlog

# at 22101158

#150702 20:31:27 server id 1 end_log_pos 22101230 query thread_id=1234 exec_time=0 error_code=0

set timestamp=1435894287/*!*/;

begin

/*!*/;

# at 22101230

#150702 20:31:13 server id 1 end_log_pos 22101316 query thread_id=1234 exec_time=0 error_code=0

set timestamp=1435894273/*!*/;

insert t1 values(2)

/*!*/;

# at 22101316

#150702 20:31:14 server id 1 end_log_pos 22101402 query thread_id=1234 exec_time=0 error_code=0

set timestamp=1435894274/*!*/;

insert t1 values(4)

/*!*/;

# at 22101402

#150702 20:31:24 server id 1 end_log_pos 22101488 query thread_id=1234 exec_time=0 error_code=0

set timestamp=1435894284/*!*/;

insert t1 values(6)

/*!*/;

# at 22101488

#150702 20:31:27 server id 1 end_log_pos 22101515 xid = 480617

commit/*!*/;

# at 22101515

#150702 20:31:32 server id 1 end_log_pos 22101587 query thread_id=1232 exec_time=0 error_code=0

set timestamp=1435894292/*!*/;

begin

/*!*/;

# at 22101587

#150702 20:30:52 server id 1 end_log_pos 22101673 query thread_id=1232 exec_time=0 error_code=0

set timestamp=1435894252/*!*/;

insert t1 values(1)

/*!*/;

# at 22101673

#150702 20:30:55 server id 1 end_log_pos 22101759 query thread_id=1232 exec_time=0 error_code=0

set timestamp=1435894255/*!*/;

insert t1 values(3)

/*!*/;

# at 22101759

#150702 20:30:56 server id 1 end_log_pos 22101845 query thread_id=1232 exec_time=0 error_code=0

set timestamp=1435894256/*!*/;

insert t1 values(5)

/*!*/;

# at 22101845

#150702 20:31:18 server id 1 end_log_pos 22101931 query thread_id=1232 exec_time=0 error_code=0

set timestamp=1435894278/*!*/;

insert t1 values(7)

/*!*/;

# at 22101931

#150702 20:31:20 server id 1 end_log_pos 22102017 query thread_id=1232 exec_time=0 error_code=0

set timestamp=1435894280/*!*/;

insert t1 values(9)

/*!*/;

# at 22102017

#150702 20:31:30 server id 1 end_log_pos 22102104 query thread_id=1232 exec_time=0 error_code=0

set timestamp=1435894290/*!*/;

insert t1 values(11)

/*!*/;

# at 22102104

#150702 20:31:32 server id 1 end_log_pos 22102131 xid = 480613

commit/*!*/;

可以看到session2的事務因為更早提交,所以position更靠前,但是因為請求時間比較晚,所以timestamp落後於session1所提交的事務

php高併發狀態下檔案的讀寫

背景 1 對於pv不高或者說併發數不是很大的應用,不用考慮這些,一般的檔案操作方法完全沒有問題 2 如果併發高,在我們對檔案進行讀寫操作時,很有可能多個程序對進一檔案進行操作,如果這時不對檔案的訪問進行相應的獨佔,就容易造成資料丟失 對於這樣的問題,一般的解決方案 1 當一程序對檔案進行操作時,首先...

高併發狀態下快取失效及其解決辦法

專案中使用redis快取,會存在各種各樣的問題,例如快取沒有命中,沒有查到資料,快取沒有使用到,這一系列的問題,簡單的說就是 快取穿透,快取雪崩,快取擊穿 快取穿透當查詢乙個一定不存在的資料,由於快取中沒有這個資料,所以將會去資料庫中查詢,但是資料庫中也沒有這個資料,而我們在資料庫查詢到為null的...

讀 寫鎖的實現和應用(高併發狀態下的map實現)

程式中涉及到對一些共享資源的讀和寫操作,且寫操作沒有讀操作那麼頻繁。在沒有寫操作的時候,兩個執行緒同時讀乙個資源沒有任何問題,所以應該允許多個執行緒能在同時讀取共享資源。但是如果有乙個執行緒想去寫這些共享資源,就不應該再有其它執行緒對該資源進行讀或寫 譯者注 也就是說 讀 讀能共存,讀 寫不能共存,...