Mysql
MySQL 5.1 - 長時間執行選擇鎖定表並且不允許插入
平台 - MySQL 5.1,MyISAM 引擎 我們在 Prod 系統中達到了 int(id,自動增量)的最大值。將類型更改為 BigInt。即使進行了此更改,長時間執行的選擇也會鎖定表,並且插入會永遠在隊列中等待。任何建議表示讚賞。謝謝!
MISAM 不提供行級鎖定,因此整個表在每個 DML 或 DDL 語句上都被鎖定。INNODB 允許僅鎖定查詢中涉及的行,因此可以執行多個並發查詢。因此從 MISAM 遷移到 INNODB 可以解決這個問題。另一種方式(並非總是可能)是通過分區來拆分錶。由於 mysql v5.7 每個查詢只鎖定涉及的分區,而其他分區仍然可以自由查詢。
對不起,但我會在這個答案中有點苛刻。
面對它。你被困住了。
- 5.1 – 那是 4 個過時的主要版本。已經發生了很多改進。(雖然,不一定能解決這個問題。)
- MyISAM——由於許多原因,這實際上已被棄用;你遇到過其中之一。切換到 InnoDB。(同樣,它可能對這個問題沒有幫助。)
- 達到 4G 限制
AUTO_INCREMENT
——這意味著您正在監控情況。儘早發現這個問題會減少停機時間(因為表會更小)。現在可能還有其他迫在眉睫的災難可以解決嗎?也許有些INTs
可以同時縮小到MEDIUMINT
(等)?pt-online-schema-change
是解決此類問題的絕佳工具。但我擔心它不會適用,因為您還沒有使用 InnoDB。我不知道其他工具,ghOST
.讓我們看看
SHOW CREATE TABLE
;可能還有其他提示;也許甚至是擺脫的方法id
?可能還有一些技術可以避免或減輕您看到的選擇鎖定。一個醜陋的解決方案是開始第二張桌子。所有新外掛都進入其中。都
SELECTs
變成了UNION
兩個表之間的一個。向我們展示插入/更新/刪除/選擇;也許我們可以提供進一步的建議。哦,被
ids
其他表引用了嗎?