Mysql

MySQL 5.1 - 長時間執行選擇鎖定表並且不允許插入

  • October 18, 2019

平台 - 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其他表引用了嗎?

引用自:https://dba.stackexchange.com/questions/216105