首頁 資料庫 mysql教程 MySQL基本調度策略淺析

MySQL基本調度策略淺析

Feb 18, 2017 am 11:23 AM

[導讀]   MySQL允許影響語句的調度特性,這樣會使來自幾個客戶機的查詢更好地協作,從而單一客戶機不會被鎖定太長的時間。更改調度特性還能確保特定的查詢處理得更快。我們先來看MySQL的缺省調度策略,然後來看看

  MySQL允許影響語句的調度特性,這樣會使來自幾個客戶機的查詢更好地協作,從而單個客戶機不會被鎖定太長的時間。更改調度特性還能確保特定的查詢處理得更快。我們先來看看MySQL的預設調度策略,然後來看看改變這個策略可使用什麼樣的選項。為討論的目的,假設執行檢索( SELECT)的客戶機程式為讀取程式。執行修改表操作( DELETE,INSERT,REPLACE 或UP DATE)的另一個客戶機程式為寫入程式。

 

  MySQL的基本調度策略可總結如下:

  ◆寫入請求應依其到達的次序進行處理。

  ◆寫入具有比讀取更高的優先權。

  在表鎖的幫助下實現調度策略。客戶機程式無論何時要存取表,都必須先取得該表的鎖。可以直接用LOCK TABLES 來完成這項工作,但一般伺服器的鎖管理器會在需要時自動取得鎖。在客戶機結束對錶的處理時,可釋放表上的鎖定。直接取得的鎖可用UNLOCK TABLES 釋放,但伺服器也會自動釋放它所獲得的鎖。

  執行寫入操作的客戶機必須對錶具有獨佔存取的鎖定。在寫入操作進行中,由於正在對錶進行資料記錄的刪除、增加或更改,因此該表處於不一致狀態,而且該表上的索引也可能需要作相應的更新。如果表處於不斷變化中,此時允許其他客戶機存取該表會出問題。讓兩台客戶機同時寫同一個表顯然不好,因為這樣很快就會使該表不可用。允許客戶機讀不斷變化的表也不是件好事,因為可能在讀該表的那一刻正好正在對它進行更改,其結果是不正確的。執行讀取操作的客戶機必須有一把防止其他客戶機寫該表的鎖,以確保讀表的過程中表不會出現變化。不過,該鎖無需對讀取操作提供獨佔存取。此鎖還允許其他客戶機同時對錶進行讀取。讀取不會更改表,所有沒必要阻止其它客戶機對該表進行讀取。

 

  MySQL允許借助幾個查詢限修飾符對其調度策略施加影響。其中之一是DELETE、INSERT、LOAD DATA、REPLACE 和UP DATE 語句的LOW_PRIORITY 關鍵字。另一個是SELECT 語句的HIGH_PRIORITY 關鍵字。第三個是INSERT 和REPLACE 語句的DELAYED 關鍵字。

  LOW_PRIORITY 關鍵字如下影響調度。一般情況下,如果某個表的寫入操作在表正被讀取時到達,寫入程式被阻塞,直到讀取程式完成,因為一旦某個查詢開始,就不能中斷。如果另一個讀取請求在寫入程式等待時到達,此讀取程式也被阻塞,因為預設的調度策略為寫入程式具有比讀取程式高的優先權。在第一個讀取程式結束時,寫入程式繼續,在此寫入程式結束時,第二個讀取程式開始。

  如果寫入請求為LOW_PRIORITY 的請求,則不將該寫入操作視為具有比讀取操作優先權高的操作。在此情況下,如果第二個讀取請求在寫入程式等待時到達,則讓第二個讀取操作排在等待的寫入操作之前。僅當沒有其他讀取請求時,才允許寫入程式執行。這種調度的更改從理論上說,其含義為LOW_PRIORITY 寫入可能會永遠被封鎖。當正在處理前面的讀取請求時,只要另一個讀取請求到達,這個新的請求允許排在LOW_PRIORITY 寫入之前。

  SELECT 查詢的HIGH_PRIORITY 關鍵字作用類似。它使SELECT 插在正在等待的寫入操作之前,即使該寫入操作具有正常的優先權。 INSERT 的ELAYED 修飾符作用如下,在表的一個INSERT DELAYED 請求到達時,伺服器將相應的行放入一個隊列,並立即返回一個狀態到客戶機程序,以便該客戶機程序可以繼續執行,即使這些行尚未插入表中。如果讀取程式正在對錶進行讀取,那麼佇列中的行掛起。在沒有讀取時,伺服器開始開始插入延遲行佇列中的行。伺服器不時停下來看看是否有新的讀取請求到達,並進行等待。如果是這樣,延遲行佇列將掛起,並允許讀取程式繼續。在沒有其他的讀取操作時,伺服器再次開始插入延遲行。這個過程一直進行到延遲行隊列空為止。

 

  此並非出現在所有MySQL版本中。下面的表列出了這些修飾符和支援這些修飾符的MySQL版本。可利用此表來判斷所使用的MySQL版本具有什麼樣的功能:

  如果其他客戶機可能執行冗長的SELECT 語句,而且您不希望等待插入完成,此時INSERT DELAYED 很有用。發布INSERT DELAYED 的客戶機可以更快地繼續執行,因為伺服器只是簡單地將要插入的行插入。不過應該對正常的INSERT 和INSERT DELAYED 表現之間的差異有所認識。如果INSERT DELAYED 有語法錯誤,則向客戶機發出錯誤,如果正常,便不發出訊息。例如,在此語句傳回時,不能相信所取得的AUTO_INCREMENT 值。也得不到惟一索引上的重複數目的計數。之所以這樣是因為此插入操作在實際的插入完成前返回了一個狀態。其他也表示,如果INSERT DELAYED 語句的行在等待插入中被排隊,並且伺服器崩潰或被終止(用kill -9),那麼這些行將會遺失。正常的TERM 終止不會這樣,伺服器會在退出前將這些行插入。

 以上就是 MySQL基本調度策略淺析的內容,更多相關內容請關注PHP中文網(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

與MySQL中使用索引相比,全表掃描何時可以更快? 與MySQL中使用索引相比,全表掃描何時可以更快? Apr 09, 2025 am 12:05 AM

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

可以在 Windows 7 上安裝 mysql 嗎 可以在 Windows 7 上安裝 mysql 嗎 Apr 08, 2025 pm 03:21 PM

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

說明InnoDB全文搜索功能。 說明InnoDB全文搜索功能。 Apr 02, 2025 pm 06:09 PM

InnoDB的全文搜索功能非常强大,能够显著提高数据库查询效率和处理大量文本数据的能力。1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

InnoDB中的聚類索引和非簇索引(次級索引)之間的差異。 InnoDB中的聚類索引和非簇索引(次級索引)之間的差異。 Apr 02, 2025 pm 06:25 PM

聚集索引和非聚集索引的區別在於:1.聚集索引將數據行存儲在索引結構中,適合按主鍵查詢和範圍查詢。 2.非聚集索引存儲索引鍵值和數據行的指針,適用於非主鍵列查詢。

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

mysql 和 mariadb 可以共存嗎 mysql 和 mariadb 可以共存嗎 Apr 08, 2025 pm 02:27 PM

MySQL 和 MariaDB 可以共存,但需要謹慎配置。關鍵在於為每個數據庫分配不同的端口號和數據目錄,並調整內存分配和緩存大小等參數。連接池、應用程序配置和版本差異也需要考慮,需要仔細測試和規劃以避免陷阱。在資源有限的情況下,同時運行兩個數據庫可能會導致性能問題。

RDS MySQL 與 Redshift 零 ETL 集成 RDS MySQL 與 Redshift 零 ETL 集成 Apr 08, 2025 pm 07:06 PM

數據集成簡化:AmazonRDSMySQL與Redshift的零ETL集成高效的數據集成是數據驅動型組織的核心。傳統的ETL(提取、轉換、加載)流程複雜且耗時,尤其是在將數據庫(例如AmazonRDSMySQL)與數據倉庫(例如Redshift)集成時。然而,AWS提供的零ETL集成方案徹底改變了這一現狀,為從RDSMySQL到Redshift的數據遷移提供了簡化、近乎實時的解決方案。本文將深入探討RDSMySQL零ETL與Redshift集成,闡述其工作原理以及為數據工程師和開發者帶來的優勢。

mysql用戶和數據庫的關係 mysql用戶和數據庫的關係 Apr 08, 2025 pm 07:15 PM

MySQL 數據庫中,用戶和數據庫的關係通過權限和表定義。用戶擁有用戶名和密碼,用於訪問數據庫。權限通過 GRANT 命令授予,而表由 CREATE TABLE 命令創建。要建立用戶和數據庫之間的關係,需創建數據庫、創建用戶,然後授予權限。

See all articles