คำถามติดแท็ก dmv

DMV ใน SQL Server เป็นคำที่ใช้จับทั้งหมดสำหรับมุมมองการจัดการฐานข้อมูล [& ฟังก์ชัน] ในทางเทคนิคตอนนี้พวกเขาทั้งหมดเป็น DMO (Object Management Objects) อย่างไรก็ตามคำว่า DMV ยังคงเป็นที่เข้าใจและยอมรับโดยส่วนใหญ่

1
วางแผนขนาดแคชและหน่วยความจำที่สงวนไว้
เมื่อรันเคียวรีรวมถึงแผนการดำเนินการตามจริงผู้ดำเนินการรูท ( SELECT) จะบอกฉันว่าขนาดแผนแคชคือ 32KB แบบสอบถามที่เข้าร่วมsys.dm_exec_cached_plansและsys.dm_os_memory_objectsมองไปที่แผนดังกล่าวกล่าวว่าค่าสำหรับpages_in_bytesและmax_pages_in_bytesคือ 32768 (32KB) ซึ่งตรงกับขนาดแผนแคช สิ่งที่ฉันไม่เข้าใจคือสิ่งที่มีค่าsys.dm_exec_cached_plans.size_in_bytesซึ่งคือ 49152 (48KB) ฉันได้อ่าน BOL ในคอลัมน์เหล่านี้ทั้งหมดและโดยเฉพาะsize_in_bytesที่บอกว่า: " จำนวนไบต์ที่ใช้โดยวัตถุแคช " ฉันไม่สามารถรับจิ๊กซอว์ชิ้นสุดท้ายได้เพื่อทำความเข้าใจความหมายของมัน ฉันรู้ว่าตัวดำเนินการทั้งหมด (ไม่ได้พูดถึงการให้สิทธิ์หน่วยความจำเพิ่มเติมที่ใช้สำหรับการเรียงลำดับและแฮช) ต้องใช้หน่วยความจำคงที่จำนวนหนึ่งเพื่อจัดเก็บสถานะทำการคำนวณ ฯลฯ ซึ่งจัดเก็บไว้ด้วยแผนเพิ่มประสิทธิภาพในแคช ดังนั้นคำถามของฉันคือ: อะไรsize_in_bytesจริงๆหมายถึง เพราะเหตุใดจึงมีมูลค่าสูงกว่า "ขนาดแผนแคช" จำนวนหน่วยความจำคงที่สำหรับตัวดำเนินการทั้งหมด / ตัวจองที่จองไว้กับ "ขนาดแผนแคช" (32Kb ในตัวอย่างของฉัน) หรือที่อื่น? ฉันรู้ว่าพวกเขาเป็น DMV ที่แตกต่างกันและมีฟังก์ชั่นต่างกัน แผนเรียบเรียง (แคช) sys.dm_exec_cached_plansรวมsys.dm_os_memory_objectsในmemory_object_addressคอลัมน์ เหตุผลที่ฉันโพสต์คำถามที่นี่คือฉันขอความช่วยเหลือในเรื่องนี้เข้าใจวิธีตีความ DMV และคอลัมน์ของพวกเขา ถ้าsize_in_bytesขนาดของแผนแคชทำไม SQL Server ถึงพูดถึงค่าอื่นในแผนการดำเนินการจริง แบบสอบถามใหม่หมายเลขใหม่: แผนจริง …

3
ตรวจสอบความคืบหน้าของการแก้ไขการจัดระเบียบดัชนีใหม่ / สร้างใหม่
ฉันจะตรวจสอบความคืบหน้า / สถานะได้อย่างไรเมื่อฉันส่งการเปลี่ยนแปลงดัชนีการจัดระเบียบใหม่ / สร้างใหม่?

2
stats_column_id และ index_column_id ไม่อัพเดตด้วยลำดับฟิสิคัลของดัชนีคลัสเตอร์ที่มีการเปลี่ยนแปลง
ยกเว้นว่าฉันเข้าใจผิดวัตถุประสงค์ของคอลัมน์รหัสต่อไปนี้บ่งชี้ว่าการเปลี่ยนแปลงโครงสร้างของดัชนีคลัสเตอร์จะไม่เปลี่ยนตำแหน่งอันดับ ( stats_column_id) ของคอลัมน์ในsys.stats_columns DMV (ทดสอบใน AdventureWorks2014, AdventureWorks2008R2) select i.name, c.name, ic.column_id, ic.index_column_id from sys.indexes i join sys.index_columns ic on i.object_id = ic.object_id and i.index_id = ic.index_id join sys.columns c on i.object_id = c.object_id and ic.column_id = c.column_id where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID' order by ic.key_ordinal; select sh.name,s.name, c.name, c.column_id, sc.column_id, …

5
ปรับปรุงประสิทธิภาพของ sys.dm_db_index_physical_stats
ในระหว่างงานซ่อมบำรุงฉันพยายามหารายการดัชนีแยกส่วน แต่แบบสอบถามช้ามากและใช้เวลากว่า 30 นาทีในการดำเนินการ ฉันคิดว่านี่เป็นเพราะการสแกนระยะไกลบน sys.dm_db_index_physical_stats มีวิธีใดบ้างที่จะเพิ่มความเร็วคิวรีต่อไปนี้: SELECT OBJECT_NAME(i.OBJECT_ID) AS TableName, i.name AS TableIndexName FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') phystat INNER JOIN sys.indexes i ON i.OBJECT_ID = phystat.OBJECT_ID AND i.index_id = phystat.index_id WHERE phystat.avg_fragmentation_in_percent > 20 AND OBJECT_NAME(i.OBJECT_ID) IS NOT NULL ORDER BY phystat.avg_fragmentation_in_percent DESC ฉันไม่ใช่ DBA และอาจทำให้เกิดข้อผิดพลาดอย่างชัดเจนในแบบสอบถามด้านบนหรืออาจมีดัชนีหรือสถิติบางอย่างที่จะช่วยได้ บางทีมันอาจเป็นเพียงขนาดของฐานข้อมูล …

5
ใน SQL Server จะมีวิธีในการกำหนดค่าของพารามิเตอร์ที่ส่งผ่านไปยังกระบวนงานที่เก็บไว้
วิธีหนึ่งในการกำหนดโพรซีเดอร์ที่เก็บไว้ซึ่งเรียกใช้โพรซีเดอร์คือใช้วิธี "การจัดการแบบไดนามิก" เช่น: SELECT sqlText.Text, req.* FROM sys.dm_exec_requests req OUTER APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqltext อย่างไรก็ตามสิ่งนี้จะแสดงเฉพาะข้อความของคำสั่งสร้างของโพรซีเดอร์ที่เก็บไว้ เช่น: CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id เป็นการดีที่ฉันต้องการดูว่าพารามิเตอร์สำหรับกระบวนการทำงานที่ทำให้มันทำงานนานมากสำหรับชุดของพารามิเตอร์ที่ละเมิด มีวิธีทำเช่นนั้นหรือไม่? (ในคำถามนี้ Aaron Bertrandกล่าวถึงInputBuffer DBCCแต่ฉันไม่คิดว่ามันเหมาะสมสำหรับปัญหานี้)

3
total_elapsed_time ใน DMV sys.dm_exec_requests ไม่ถูกต้องสมบูรณ์หรือไม่
ฉันกำลังเรียกใช้ SQL Server 2012 และพยายามรวบรวมแบบสอบถามเพื่อตรวจสอบการใช้ DMV อย่างไรก็ตามเมื่อดูที่total_elapsed_timeฟิลด์ในsys.dm_exec_requestsDMV ตัวเลขจะดูออกไป นี่คือตัวอย่าง: SELECT session_id, RunTime = CURRENT_TIMESTAMP, start_time, total_elapsed_time FROM sys.dm_exec_requests WHERE session_id = 284; session_id RunTime start_time total_elapsed_time 284 2016-04-07 16:14:03.690 2016-04-07 16:08:14.587 1419976 จากการคำนวณของฉัน * เวลาที่ผ่านไปควรอยู่ที่ประมาณ 349,103 - ไม่ใช่ 1,419,976 ที่ปิดโดยเกิน 4 ปัจจัย * จากความแตกต่างเป็นมิลลิวินาทีระหว่างเวลาปัจจุบันและstart_timeคือ SELECT DATEDIFF(MILLISECOND, '2016-04-07T16:08:14.587', '2016-04-07T16:14:03.690'); นี่คือข้อมูลเซิร์ฟเวอร์: SELECT …

2
การใช้พื้นที่บน sys.allocation_units และ sp_spaceused
มันเป็นความจริงที่รู้จักกันว่า DMVs ไม่ได้เก็บข้อมูลที่ถูกต้องเกี่ยวกับจำนวนหน้าและจำนวนแถว อย่างไรก็ตามเมื่อคุณอัปเดตสถิติฉันไม่สามารถเห็นได้ว่าทำไมพวกเขาถึงไม่ทำ ฉันกำลังทำงานกับเครื่องมือตรวจสอบ, ต้องการทราบขนาดดิสก์ของแต่ละดัชนีและข้อมูล ฯลฯ ในที่สุดฉันต้องการค้นหาปัจจัยเติมที่เหมาะสมและสิ่งอื่น ๆ เป็นต้น พื้นที่ที่ใช้โดยฟังก์ชั่นของฉันและ sp_spaceused เก่าแตกต่างกันเล็กน้อยในการใช้พื้นที่ แต่ไม่ได้อยู่ในการบันทึก คุณเห็นหรือไม่ว่ามีอะไรขาดหายไปในการเลือกของฉัน นี่คือ sp_spaceused (จากนั้นฉันแปลงตัวเลขเป็น MB): sp_spaceused 'tblBOrderRelationship' go select 318008/1024.00 AS reserved, 140208/1024.00 AS data, 177048/1024.00 AS index_size, 752/1024.00 AS unused แต่เมื่อฉันเลือกตัวเลือกโค้ดด้านล่าง \ ภาพด้านล่างฉันได้รับตัวเลขที่แตกต่างกันเล็กน้อย SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT schema_name(t.schema_id) as SchemaName, t.NAME AS …

2
การตั้งค่า READ UNCOMMITTED เมื่ออ่าน DMV
ฉันเคยเห็นหลายคนโทรSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDมาก่อนอ่านระบบ DMV มีเหตุผลใดที่จะทำเช่นนี้โดยสมมติว่าคุณไม่ได้โทรไปยัง DMV และตารางในธุรกรรมเดียวกันหรือไม่?
12 sql-server  dmv 


1
ความแตกต่างระหว่าง last_worker_time และ last_elapsed_time ใน DMV sys.dm_exec_query_stats คืออะไร?
สิ่งที่เป็นความหมายของlast_worker_timeและlast_elapsed_timeใน DMV sys.dm_exec_query_statsและสิ่งที่แตกต่างมันระหว่างพวกเขา? เมื่อฉันไฟด้านล่างแบบสอบถาม SELECT TOP 20 qs.last_worker_time, qs.last_worker_time/1000000 last_worker_time_in_S, qs.last_elapsed_time, qs.last_elapsed_time/1000000 last_elapsed_time_in_S FROM sys.dm_exec_query_stats qs order by qs.last_worker_time desc ฉันได้รับ reult เช่นด้านล่าง ในสิ่งที่ฉันสังเกตเห็นว่าทั้งสองมีค่าเท่ากันหรือเวลาที่ผ่านไปมากกว่าเวลาทำงานฉันอยากจะทำความเข้าใจกับความสำคัญของทั้งสองอย่างดังนั้นมันอาจช่วยฉันในการปรับแต่งการแสดง

1
“ ธุรกรรมที่ถูกแฮช” ในคำศัพท์การจำลองแบบเซิร์ฟเวอร์ SQL คืออะไร
sys.dm_repl_tranhashมีข้อมูลเกี่ยวกับการแปลงธุรกรรม แต่ฉันมีปัญหาในการเข้าใจคำศัพท์ "ธุรกรรมที่ถูกแฮช" คืออะไร

2
คำเตือน sys.dm_exec_query_stats มีผลกระทบอย่างไรในเอกสารประกอบ?
เอกสารสำหรับsys.dm_exec_query_statsรัฐต่อไปนี้: เคียวรีเริ่มต้นของ sys.dm_exec_query_stats อาจสร้างผลลัพธ์ที่ไม่ถูกต้องหากมีเวิร์กโหลดที่กำลังเรียกใช้งานบนเซิร์ฟเวอร์ในปัจจุบัน ผลลัพธ์ที่แม่นยำยิ่งขึ้นอาจถูกกำหนดโดยทำการค้นหาใหม่ บางครั้งฉันค้นหา DMV นั้นในระหว่างที่มีปริมาณงานที่ใช้งานอยู่และต้องการผลลัพธ์ที่แม่นยำ ฉันไม่ทราบวิธีการใช้คำเตือนข้างต้นในทางปฏิบัติ ฉันควรสอบถาม DMV เสมอสองครั้งและใช้ชุดผลลัพธ์ที่สองเพราะนั่นจะแม่นยำยิ่งขึ้นหรือไม่ ที่รู้สึกลึกซึ้งเล็กน้อย ฉันจำเป็นต้องทราบถึงวิธีการที่ DMV ไม่ถูกต้องหรือไม่เพื่อให้ฉันสามารถแยกแยะสิ่งนั้นออกจากการวิเคราะห์ของฉันได้ ถ้าเป็นเช่นนั้นความผิดพลาดประเภทใดที่จะปรากฏ: แถวที่หายไปค่าที่ล้าสมัยแถวที่ไม่สอดคล้องกันหรืออย่างอื่น แนวปฏิบัติที่เหมาะสมที่สุดเมื่อใช้sys.dm_exec_query_statsในระหว่างเวิร์กโหลดที่ใช้งานอยู่คืออะไร
10 sql-server  dmv 

1
คอลัมน์“ อ่าน” ใน sys.dm_exec_sessions จริง ๆ บ่งชี้อะไร
นี่อาจดูเหมือนคำถามพื้นฐานมากและแน่นอนควรเป็นเช่นนั้น อย่างไรก็ตามในฐานะแฟนของวิธีการทางวิทยาศาสตร์ฉันชอบที่จะสร้างสมมติฐานแล้วทดสอบเพื่อดูว่าฉันถูกต้อง ในกรณีนี้ฉันพยายามทำความเข้าใจกับผลลัพธ์ของsys.dm_exec_sessionsและโดยเฉพาะคอลัมน์ "อ่าน" SQL Server Books Online ค่อนข้างจะระบุว่าเป็น: จำนวนการอ่านที่ดำเนินการตามคำขอในเซสชันนี้ในระหว่างเซสชันนี้ ไม่เป็นโมฆะ หนึ่งอาจสันนิษฐานว่าสิ่งนี้จะบ่งบอกถึงจำนวนหน้าอ่านจากดิสก์เพื่อตอบสนองการร้องขอที่ออกโดยเซสชั่นนี้ตั้งแต่เริ่มต้นของเซสชั่น นี่คือสมมติฐานที่ฉันคิดว่าฉันจะทดสอบ logical_readsคอลัมน์ในตารางเดียวกันกับที่มีการกำหนดเป็น: จำนวนการอ่านโลจิคัลที่ดำเนินการบนเซสชัน ไม่เป็นโมฆะ จากประสบการณ์ที่ใช้ SQL Server ผมเชื่อว่าคอลัมน์นี้สะท้อนให้เห็นถึงจำนวนของหน้าเว็บที่ได้รับการอ่านทั้งจากดิสก์และในหน่วยความจำ กล่าวอีกนัยหนึ่งจำนวนหน้าทั้งหมดที่เคยอ่านจากเซสชันไม่ว่าหน้านั้นจะอยู่ที่ใด ความแตกต่างหรือข้อเสนอคุณค่าของการมีสองคอลัมน์แยกต่างหากที่ให้ข้อมูลที่คล้ายกันดูเหมือนจะเป็นที่หนึ่งที่สามารถเข้าใจอัตราส่วนของหน้าอ่านจากดิสก์ ( reads) เทียบกับที่อ่านจากแคชแคช ( logical_reads) สำหรับเซสชั่นที่เฉพาะเจาะจง บนอุปกรณ์ทดสอบของฉันฉันได้สร้างฐานข้อมูลใหม่สร้างตารางเดียวที่มีจำนวนหน้าข้อมูลที่รู้จักแล้วอ่านตารางนั้นในเซสชันใหม่ จากนั้นฉันดูsys.dm_exec_sessionsเพื่อดูสิ่งที่readsและlogical_readsคอลัมน์พูดเกี่ยวกับเซสชัน ณ จุดนี้ฉันรู้สึกสับสนกับผลลัพธ์ บางทีบางคนที่นี่สามารถหลั่งน้ำตาให้ฉัน อุปกรณ์ทดสอบ: USE master; IF EXISTS (SELECT 1 FROM sys.databases d WHERE d.name = 'TestReads') BEGIN ALTER DATABASE …

4
มีวิธีที่รวดเร็วในการค้นหาคอลัมน์ทั้งหมดใน SQL Server 2008 R2 ที่เข้ารหัส / มีข้อมูลที่เข้ารหัสหรือไม่
มีวิธีที่รวดเร็วในการค้นหาคอลัมน์ทั้งหมดใน SQL Server 2008 R2 ที่เข้ารหัส / มีข้อมูลที่เข้ารหัสหรือไม่ ฉันต้องการลบล้างข้อมูลในคอลัมน์ที่เข้ารหัสทั้งหมดในเซิร์ฟเวอร์การพัฒนา (ตามกฎทางธุรกิจของเรา) ฉันรู้ว่าส่วนใหญ่ของคอลัมน์เพราะเราใช้พวกเขาเป็นประจำ แต่ฉันต้องการที่จะอย่างละเอียดและฉันต้องการที่จะพิสูจน์ว่าฉันได้พบพวกเขาทั้งหมด ฉันค้นหาเว็บแล้วดูในINFORMATION_SCHEMAและตรวจสอบ DMV ที่ฉันคิดว่าน่าจะมีประโยชน์และยังมีsys.columnsและsys.objects ด้วย - แต่จนถึงตอนนี้ก็ไม่มีโชค

1
แถวศูนย์กลับมาจากการสอบถาม DMV sys.dm_os_performance_counters
ฉันมีผู้ใช้ที่SQL Server 2014 Standard Edition (RTM)มีSYSADMINบทบาทกับสิทธิ์การดูสถานะเซิร์ฟเวอร์ แต่เมื่อฉันเรียกใช้ DMV sys.dm_os_performance_countersจะไม่มีการบันทึก มีความคิดใดที่ผิดปกติเกี่ยวกับการอนุญาต เอาต์พุตของ @@ เวอร์ชัน: Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 20 ก.พ. 2014 20:04:26 ลิขสิทธิ์ (c) Microsoft Corporation Standard Edition (64 บิต) บน Windows NT 6.3 (รุ่น 9600:) (Hypervisor)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.