2016-03-01 120 views
0

在MyISAM引擎上MySQL服務器(5.1)MyISAM鎖定大型select語句

我們有一些大的查詢來做報告(100萬條結果)。我注意到這些select語句鎖定了表。 我在互聯網上找不到真正的解釋。從我所瞭解的表中只能在選擇和插入(等)語句之間切換時鎖定。

我發現有人用同樣的問題http://devoluk.com/mysql-myisam-table-lock-issue.html

當我轉換表InnoDB的表鎖不會發生。不幸的是,轉換生產需要數天,所以它不是一個真正的選擇。

有人有同樣的問題,或如何使它不被阻塞?

+0

MyISAM總是在SELECT/UPDATE進程上鎖定表。 InnoDB只鎖定有關的行而不是整個表。 – Martin

+1

請參閱http://dev.mysql.com/doc/refman/5.7/en/internal-locking.html – Martin

回答

1

主題1:SELECT ... - 長期運行
主題2:插入/刪除/更新/ etc ... - 等待線程1完成
主題3:SELECT ... - 將等待線程2

SELECT執行共享讀取鎖定,該鎖定允許其他SELECT,但不允許任何寫入。

MyISAM 不能有「死鎖」。 (引用的文章可能會濫用該術語。)

此外,請查看INSERT DELAYED,但請注意其警告。

and LOW_PRIORITY