簡體   English   中英

如何在MySQL數據庫中處理同時查詢?

[英]How simultaneous queries are handled in a MySQL database?

我正在使用MySQL數據庫,我想知道我是否同時進行多個(500個或更多)查詢以獲取來自多個表的信息,如何處理這些查詢? 順序還是並行?

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

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

有關更多信息,請閱讀有關一般事務和MySQL中的實現。

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

通常,希望查詢不會相互阻塞。 然而,根據引擎和查詢,它們可能會。 MySQL中有很多鎖定,在手冊中有詳細討論。

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

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

通常,所有查詢都將並行運行。

但是......有一些例外。 根據您的事務隔離級別,可以在更新時鎖定行。 在此處閱讀更多相關信息: http//dev.mysql.com/doc/refman/5.1/en/dynindex-isolevel.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM