亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

MySQL基本調度策略淺析

添加時間:2014-1-14 1:23:14  添加: 思海網絡 

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

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

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

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

  在表鎖的幫助下實現調度策略?蛻魴C程序無論何時要訪問表,都必須首先獲得該表的鎖?梢灾苯佑肔OCK 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、服務器、調度策略

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站