แบบสอบถามใช้เวลานานขึ้นเพื่อจบการทำงานเมื่อขนาดของแคช TokenAndPermUserStore grows ใน SQL Server 2005

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 927396 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
bug #: 429501 (SQLBUDT)
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

ใน Microsoft SQL Server 2005 คุณอาจพบอาการต่อไปนี้:
  • แบบสอบถามที่รันได้เร็วขึ้นโดยทั่วไปใช้เวลานานขึ้นเพื่อจบการทำงาน
  • การใช้งาน CPU สำหรับกระบวนการของ sql server จะมากกว่าปกติ
  • เมื่อคุณพบประสิทธิภาพการทำงานลดลงเมื่อคุณรันการสอบถามเฉพาะกิจ ดูแบบสอบถามจากนั้นsys.dm_exec_requestsหรือsys.dm_os_waiting_tasksมุมมองการจัดการแบบไดนามิก อย่างไรก็ตาม แบบสอบถามไม่ใช่ที่ จะรอทรัพยากรต่าง ๆ
  • ขนาดของเก็บแค TokenAndPermUserStore grows ที่อัตรา steady
  • ขนาดของเก็บแค TokenAndPermUserStore อยู่ในลำดับของหลาย hundred เมกะไบต์ (MB)
  • ในบางกรณี การดำเนินการคำสั่ง FREEPROCCACHE DBCC แสดง relief ชั่วคราว
การตรวจสอบขนาดของแคช TokenAndPermUserStore คุณสามารถใช้การสอบถามที่มีลักษณะดังต่อไปนี้:
SELECT SUM(single_pages_kb + multi_pages_kb) AS 
   "CurrentSizeOfTokenCache(kb)" 
   FROM sys.dm_os_memory_clerks 
   WHERE name = 'TokenAndPermUserStore'

สาเหตุ

เก็บแค TokenAndPermUserStore เก็บรักษาชนิด folllowing โทเค็นของความปลอดภัย:
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult
ระดับชั้นที่แตกต่างของรายการ TokenAccessResult ยังมีอยู่ ปัญหานี้เกิดขึ้นเนื่องจากมีรายการ TokenAccessResult จำนวนมากที่มีคลาของ 65535

บนอินสแตนซ์ของ SQL Server ที่มีอัตราสูงสุดของการดำเนินการแบบสอบถามแบบไดนามิกที่สุ่ม คุณสังเกตเห็นจำนวนมาก TokenAccessResult รายการที่มีคลาของ 65535 ในนั้นsys.dm_os_memory_cache_entriesมุมมอง รายการ TokenAccessResult ซึ่งมีคลาของ 65535 แสดงรายการของแคชพิเศษ รายการการแคชเหล่านี้จะใช้สำหรับการตรวจสอบสิทธิ์ที่สะสมสำหรับแบบสอบถาม ตัวอย่างเช่น คุณอาจเรียกใช้แบบสอบถามต่อไปนี้:
select * 
from t1 join t2 join t3
ในกรณีนี้ SQL Server คำนวณการตรวจสอบสิทธิ์ที่สะสมสำหรับแบบสอบถามนี้ ตรวจสอบนี้กำหนดว่า ผู้ใช้ที่มีการเลือกใน t1, t2, t3 ผลลัพธ์การตรวจสอบสิทธิ์สะสมเหล่านี้ฝังอยู่ในรายการแบบ TokenAccessResult และแทรกลงในเก็บแค TokenAndPermUserStore ด้วยรหัสของ 65535 ถ้าผู้ใช้เดียว reuses หรือดำเนินการแบบสอบถามนี้หลายครั้ง SQL Server reuses รายการแค TokenAccessResult ครั้งเดียว

เมื่อมีการเก็บแคนี้ grows เวลาในการค้นหารายการที่มีอยู่เพื่อที่นำมาใช้ใหม่เพิ่มขึ้น ควบคุมการเข้าถึงแคนี้ดังนั้นเธรดเดียวเท่านั้นที่สามารถทำการค้นหา สอบถามทำงานนี้จนสาเหตุเกี่ยวกับประสิทธิภาพการทำงานเพื่อลด และการใช้งาน CPU เพิ่มเติมที่เกิดขึ้น

การแก้ไข

ข้อมูล Service Pack

เมื่อต้องการแก้ไขปัญหานี้ ขอรับ service pack ล่าสุดสำหรับ SQL Server 2005 สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
913089วิธีการขอรับ service pack ล่าสุดสำหรับ SQL Server 2005
เมื่อต้องการแก้ไขปัญหานี้ SQL Server 2005 Service Pack 2 เปลี่ยนลักษณะการทำงานการแคชของโทเค็นการอนุญาต โดยค่าเริ่มต้น รายการการแคช TokenAccessResult ความปลอดภัยสำหรับการสอบถามเฉพาะกิจมีเพียงแคเมื่อแบบสอบถามเฉพาะกิจที่ระบุถูกดำเนินการอีกครั้ง

การหลีกเลี่ยงปัญหา

To work around this problem, use one or more of the following methods:
  • Explicitly parameterize ad hoc queries.

    หมายเหตุ
    • This method lets you effectively reuse ad hoc queries and their plans.
    • When you use this method, you do not have to create a TokenAccessResult entry every time that you run the ad hoc query together with different parameters.
    • With this method, the size of the TokenAndPermUserStore cache remains under reasonable limits.
  • Wrap ad hoc queries within stored procedures, and use stored procedures instead of directly executing ad hoc queries.

    หมายเหตุ
    • Execution plans are cached for the statements that are in the stored procedure.
    • The TokenAccessResult entry for each statement is associated with the execution plan entry.
    • As long as the execution plan for this stored procedure remains in the cache, every execution of the stored procedure effectively reuses the TokenAccessResult entries. Therefore, you do not have to create new TokenAccessResult entries.
  • Enable the FORCE_PARAMETERIZATION database option.

    หมายเหตุ
    • This method lets you effectively reuse ad hoc queries and their plans.
    • When you use this method, you do not have to create a TokenAccessResult entry every time that you run the ad hoc query together with different parameters.
    • With this method, the size of the TokenAndPermUserStore cache remains under reasonable limits.
  • Add the login that executes varied ad hoc queries as a member of the sysadmin server group.

    หมายเหตุ
    • TokenAccessResult entries are only created for an ad hoc query when the query is executed by a login that is not a member of the sysadmin server group.
    • Because the TokenAccessResult entries are not created, this behavior keeps the TokenAndPermUserStore cache size to a manageable size.
  • Flush entries from the TokenAndPermUserStore cache.

    หมายเหตุ
    • To do this, run the following command:
      DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')
    • Ideally, try to watch the threshold of the TokenAndPermUserStore cache size when problems start to appear.
    • You can create a scheduled SQL Server Agent job that performs the following actions:
      • Check the size of the TokenAndPermUserStore cache size. To do this, run the following command:
        SELECT SUM(single_pages_kb + multi_pages_kb) AS 
           "CurrentSizeOfTokenCache(kb)" 
           FROM sys.dm_os_memory_clerks 
           WHERE name = 'TokenAndPermUserStore'
      • If the cache size is bigger than the threshold that you observed, run the following command:
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

ข้อมูลอ้างอิง

หากต้องการทราบข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base::
933564การแก้ไข: มีการเพิ่มในปริมาณการใช้หน่วยความจำสำหรับเก็บแค USERSTORE_TOKENPERM gradual เกิดขึ้นใน SQL Server 2005
959823วิธีการกำหนดโควต้าสำหรับเก็บแค TokenAndPermUserStore ใน SQL Server 2005 Service Pack 3

คุณสมบัติ

หมายเลขบทความ (Article ID): 927396 - รีวิวครั้งสุดท้าย: 15 มกราคม 2554 - Revision: 2.0
ใช้กับ
Keywords: 
kbtshoot kbinfo kbsql2005tsql kbprb kbmt KB927396 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:927396

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com