sql server效能終結者–鎖

來源:互聯網
上載者:User

資料庫的並發能力大家應該有目共睹了,功臣當然是眾所周知的鎖了。

可以在 SELECT、INSERT、UPDATE 及 DELETE 語句中為單個表引用指定鎖提示。提示指定 Microsoft SQL Server 資料庫引擎執行個體用於表資料的鎖類型或資料列版本設定。當需要對對象所獲得鎖類型進行更精細控制時,可以使用表級鎖提示。這些鎖提示覆蓋會話的當前交易隔離等級。

 

  • 粒度提示:PAGLOCK、NOLOCK、ROWLOCK、TABLOCK 或 TABLOCKX。
  • 隔離等級提示:HOLDLOCK、NOLOCK、READCOMMITTED、REPEATABLEREAD 和 SERIALIZABLE。
  • 當啟用了基於資料列版本設定的隔離等級時,資料庫引擎 將維護修改的每一行的版本。應用程式可以指定事務使用行版本查看事務或查詢開始時存在的資料,而不是使用鎖保護所有讀取。通過使用資料列版本設定,讀取操作阻止其他事務的可能性將大大降低。

    UPDATE Production.Product
    WITH (ROWLOCK)
    SET ListPrice = ListPrice * 1.10
    WHERE ProductId=100 ;嘗試為你的更新加上rowlock。

     

    不申請共用鎖定:

    SELECT * FROM  Production.Product WITH (NOLOCK),嘗試著給你的查詢都加上nolock。

     

    設定隔離等級:

    對資料庫的完整性和有效行要求不高的查詢:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  或者SET TRANSACTION ISOLATION LEVEL READ NOLOCK

     

    使用 PAGLOCK 或 TABLOCK 表提示,使資料庫引擎使用頁、堆或索引鎖而不是行鎖。但是,使用此選項增加了使用者阻止其他使用者嘗試訪問相同資料的問題,對於並發使用者較多的系統,不應使用此選項。

    對於讀取操作,使用不會產生共用鎖定的隔離等級。
    當 READ_COMMITTED_SNAPSHOT 資料庫選項為 ON 時,使用 READ COMMITTED 隔離等級(產生共用鎖定)。
    使用 SNAPSHOT 隔離等級(除非正在恢複資料庫,否則 SNAPSHOT 事務不會在讀取資料時請求鎖。讀取資料的 SNAPSHOT 事務不會阻止其他事務寫入資料。寫入資料的事務也不會阻止 SNAPSHOT 事務讀取資料。)。
    使用 READ UNCOMMITTED 隔離等級。此隔離等級只能用於能對髒讀進行操作的系統。

     

     

    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.