2013-01-09 29 views
1

我從兩個運行在同一個表上的應用程序登錄並從兩個程序執行兩個操作,導致運行後臺SQL查詢。而一個操作會導致另一個卡住或非常緩慢地運行。我發現這兩個問題很長一段時間在一起。雖然阻塞會話爲0,但SQL查詢阻塞另一個

  1. SELECT COUNT(*)from表....
  2. 插入到表......

此外,可以請你告訴我怎麼能顯示所獲取的鎖運行時查詢或查看哪些查詢可能有衝突?

+2

顯示衝突的鎖是非常非常非常特定於DBMS的。您需要指定您正在使用的DBMS。 SELECT中點的流中的信息可能與需要這麼長時間的原因非常相關;據推測,有一個強制進行表掃描的WHERE子句。 INSERT語句的流點信息也可能相關;它可能不是一行簡單的VALUES列表。還有其他因素涉及;隔離級別可能是一個問題。如果您使用的是MySQL,那麼瞭解InnoDB與MyISAM可能也是相關的。等 –

+0

你也應該告訴我們你是如何發現「*阻塞會話是0 *」 –

+0

另外:選擇和插入不應該*阻止*對方(至少不在現代DBMS) –

回答

0

我不認爲你有任何鎖定問題,因爲select不請求任何鎖定。

您可能遇到的情況是,select必須求助於before-images,即insert之前的值(假設insert和select使用同一張表)。之前的圖像存儲在回退段中,並且訪問它們有點貴。

查詢正在填充的表格的行數是沒有意義的。結果會告訴你什麼?一微秒後就會出錯。這表明,你應該重新考慮它背後的邏輯。