2011-02-12 90 views

回答

6

查詢總是在多個會話(即客戶端連接)之間並行處理。單個連接上的所有查詢都會一個接一個地運行。多個連接之間的並行級別可以根據您的可用服務器資源進行配置。

通常,某些操作在單個查詢會話(稱爲事務)之間進行保護。這些由InnoDB後端支持,但不支持MyISAM表(但支持稱爲原子操作的概念)。存在各種不同的隔離級別,在這些隔離級別中操作彼此保護(以及因此並行事務中的操作如何影響另一個事務)以及它們的性能影響。

有關更多信息,請閱讀general中的交易以及MySQL中的實施。

+0

雖然一個查詢是單線程的。 – 2013-10-31 23:17:25

5

每個連接可以一次運行最多一個查詢,並在單個線程中執行。服務器爲每個查詢打開一個線程。

通常,希望查詢不會彼此阻塞。然而,根據引擎和查詢,他們可能會。 MySQL中有很多鎖定,本手冊將對此進行詳細討論。

但是,如果他們不互相阻塞,他們仍然可以通過消耗資源來減慢彼此的速度。 IO操作是這些減速的一個特定來源。如果你的數據不適合內存,你應該將並行查詢的數量限制在你的IO子系統可以處理的範圍內,否則事情會變得非常糟糕。衡量是關鍵。

我通常會說,如果500個查詢一次運行(而不是等待鎖),則可能無法從硬件中獲得最大價值(您是否有500個內核?有多少個線程正在等待IO?)