2013-06-11 202 views
2

我有一個從各種資源中收集數據的mysql數據庫。
爲了顯示來自不同表格的一些統計數據,我運行了一個長查詢,大約需要幾分鐘才能執行。
查詢鎖定了一些表,因此我無法寫入這些表。
這些表是InnoDB引擎。我試了幾個選項,包括:
1.增加鎖定超時
2.添加SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;COMMIT;link
3.添加索引表(進行的查詢的運行速度更快,但我仍然得到一個鎖定超時錯誤)mysql - 長查詢執行時間鎖表

如何在不鎖定表的情況下執行長查詢?

+0

什麼是查詢? – Sebas

+0

這是一羣SELECT年代,JOIN的,SUM和更多... –

+0

你肯定有一個鎖?請'SHOW PROCESSLIST'和'SHOW ENGINE INNODB STATUS'。選擇不鎖定任何東西。但他們可能*等待*爲鎖釋放 – Sebas

回答

1

從評論中Any way to select without causing locking in MySQL?

設置 「設置會話事務隔離級別讀取承諾;」沒有幫助。

設置「set session transaction isolation level readcommitted;」沒有幫助。

使用任何一方的鎖定表沒有幫助。

在my.cnf中設置innodb_locks_unsafe_for_binlog = 1修復了這個問題,但我認爲缺點是現在我無法在這個數據庫中使用複製。

如果您不需要複製,那麼我會嘗試。

+0

不知道這是否可行。我從來沒有一個問題用鎖,我傾向於留出my.cnf中儘可能的。祝你好運! –