none
SQL Server是用Table Lock的處理資料嗎? RRS feed

  • 問題

  • Dears!

    昨天聽使用Oracle的朋友說,SQL Server在處理資料的時候,是用Table Lock,所以當資料量大的時候,效能會不佳!

    而Oracle是使用Row Lock,所以效能會比較好~~

    請問各位,SQL Server真的是如他所說的這樣嗎?感恩 ...
    2009年11月17日 上午 09:21

解答

  • SQL Server 2008 可以鎖定的層級如下:

    層級(或稱「資源」) 詳細說明 

    RID

    資料列識別碼,用來鎖定堆積內單一資料列。

    KEY

    索引中的資料列鎖定,用來保護可序列化交易中的索引鍵範圍。

    PAGE

    資料庫中的 8 KB 頁面,例如資料或索引頁面。

    EXTENT

    連續八個頁面的群組,例如資料頁或索引頁面。

    HoBT

    堆積或 B 樹狀目錄。針對資料表中沒有叢集索引的 B 型樹狀結構 (索引) 或堆積資料頁面進行保護鎖定。

    TABLE

    一整個資料表,包含所有資料和索引。

    FILE

    資料庫檔案。

    APPLICATION

    應用程式指定資源。

    METADATA

    中繼資料鎖定。

    ALLOCATION_UNIT

    配置單位。

    DATABASE

    一整個資料庫。


    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    如果回覆對您有幫助,請記得按下標示為解答」
    在本討論區使用正體中文(即繁體中文),是對參與的朋友的一種尊重,因此請用本討論區的語言:正體中文。
    2009年11月17日 上午 10:08
    版主
  • Dears!

    昨天聽使用Oracle的朋友說,SQL Server在處理資料的時候,是用Table Lock,所以當資料量大的時候,效能會不佳!

    而Oracle是使用Row Lock,所以效能會比較好~~

    請問各位,SQL Server真的是如他所說的這樣嗎?感恩 ...

    hi
    SQL2005後已有row版本控制,可因存取而封鎖其他交易的機會大幅降低,基本上會從最底層物件開始lock,如index key, row
    來避免大範圍的鎖定而影響其他人無法同時存取其他資料。

    而Oracle在10g(9i已有)基本上也是自動從最底層開始lock,盡可能避免大範圍的鎖定而影響其他人的衝突。

    兩資料庫的優化器在這方面都有一個大方向,1.一律都從最底層物件開始鎖定。2.避免大範圍鎖定而影響衝突同時維持資料一致性。

    所以得問問他SQL是什麼版本??Oracle又是什麼版本??

    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年11月17日 下午 12:41
    版主
  • Sql uses page lock by default, will escalate to table lock if table has too many locks. But you can use lock hint in query to ues row lock or other level of locks and ask sql don't escalate.
    2009年11月17日 下午 04:50

所有回覆

  • 應該是Record Lock吧, 我想如果Table Lock就不可能多人同時使用一個Table了.

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年11月17日 上午 09:43
  • SQL Server 2008 可以鎖定的層級如下:

    層級(或稱「資源」) 詳細說明 

    RID

    資料列識別碼,用來鎖定堆積內單一資料列。

    KEY

    索引中的資料列鎖定,用來保護可序列化交易中的索引鍵範圍。

    PAGE

    資料庫中的 8 KB 頁面,例如資料或索引頁面。

    EXTENT

    連續八個頁面的群組,例如資料頁或索引頁面。

    HoBT

    堆積或 B 樹狀目錄。針對資料表中沒有叢集索引的 B 型樹狀結構 (索引) 或堆積資料頁面進行保護鎖定。

    TABLE

    一整個資料表,包含所有資料和索引。

    FILE

    資料庫檔案。

    APPLICATION

    應用程式指定資源。

    METADATA

    中繼資料鎖定。

    ALLOCATION_UNIT

    配置單位。

    DATABASE

    一整個資料庫。


    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    如果回覆對您有幫助,請記得按下標示為解答」
    在本討論區使用正體中文(即繁體中文),是對參與的朋友的一種尊重,因此請用本討論區的語言:正體中文。
    2009年11月17日 上午 10:08
    版主
  • Dears!

    昨天聽使用Oracle的朋友說,SQL Server在處理資料的時候,是用Table Lock,所以當資料量大的時候,效能會不佳!

    而Oracle是使用Row Lock,所以效能會比較好~~

    請問各位,SQL Server真的是如他所說的這樣嗎?感恩 ...

    hi
    SQL2005後已有row版本控制,可因存取而封鎖其他交易的機會大幅降低,基本上會從最底層物件開始lock,如index key, row
    來避免大範圍的鎖定而影響其他人無法同時存取其他資料。

    而Oracle在10g(9i已有)基本上也是自動從最底層開始lock,盡可能避免大範圍的鎖定而影響其他人的衝突。

    兩資料庫的優化器在這方面都有一個大方向,1.一律都從最底層物件開始鎖定。2.避免大範圍鎖定而影響衝突同時維持資料一致性。

    所以得問問他SQL是什麼版本??Oracle又是什麼版本??

    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年11月17日 下午 12:41
    版主
  • Sql uses page lock by default, will escalate to table lock if table has too many locks. But you can use lock hint in query to ues row lock or other level of locks and ask sql don't escalate.
    2009年11月17日 下午 04:50