คำถามติดแท็ก extended-events

SQL Server Extended Events (Extended Events) เป็นระบบจัดการเหตุการณ์ทั่วไปสำหรับระบบเซิร์ฟเวอร์

1
ข้อมูลเหตุการณ์ใดที่ฉันจะได้รับจากค่าเริ่มต้นจาก SQL Server
ฉันมักจะเห็นคำถามที่ผู้คนต้องการทราบว่ามีบางสิ่งเกิดขึ้นหรือเมื่อมันเกิดขึ้นหรือใครเป็นผู้ดำเนินการ ในหลายกรณี SQL Server ไม่ได้ติดตามข้อมูลนี้ด้วยตัวเอง ตัวอย่างเช่น: ใครดำเนินการที่ผ่านขั้นตอนการเก็บdbo.MyProcedure? ใครเป็นผู้ปรับปรุงsalaryคอลัมน์ในdbo.Employeesตาราง ใครสอบถามdbo.Ordersตารางล่าสุดจาก Management Studio บ้าง แต่มีเหตุการณ์อื่น ๆ หลายอย่างที่ SQL Server ที่ไม่ติดตามชั่วคราวโดยค่าเริ่มต้นและกำเนิดสามารถตอบคำถามเกี่ยวกับเช่น: ครั้งสุดท้ายที่การเติบโตอัตโนมัติเกิดขึ้นในฐานข้อมูล AdventureWorks และใช้เวลานานเท่าใด ใครลบdbo.EmployeeAuditDataตารางและเวลา วันนี้มีข้อผิดพลาดเกี่ยวกับหน่วยความจำกี่ข้อ? ฉันจะรับข้อมูลนี้ได้อย่างไรและจะมีอยู่นานเท่าใด

2
กระบวนการบล็อกว่างเปล่าในรายงานกระบวนการที่ถูกบล็อก
ฉันรวบรวมรายงานกระบวนการที่ถูกบล็อกโดยใช้เหตุการณ์เพิ่มเติมและด้วยเหตุผลบางประการในรายงานบางอันblocking-processโหนดนั้นว่างเปล่า นี่คือ xml แบบเต็ม: <blocked-process-report monitorLoop="383674"> <blocked-process> <process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" …

1
เมื่อใดควรใช้เหตุการณ์เพิ่มเติมแทน SQL Profiler / perfmon
เหตุการณ์เพิ่มเติมดูเหมือนว่าเทคโนโลยีที่ดีกว่าและความเครียดน้อยลงบนเซิร์ฟเวอร์ แต่ตัวสร้างโปรไฟล์ SQL / perfmon มีเครื่องมือที่ดีกว่า นอกจากนี้เหตุการณ์ที่ยืดออกดูเหมือนจะมีช่วงการเรียนรู้ที่ชันกว่า ควรใช้แต่ละบริบทในลักษณะใด มันคุ้มหรือไม่ที่จะผ่านโค้งการเรียนรู้ที่สูงชันเพื่อใช้ประโยชน์จากเหตุการณ์ที่ขยายออกไป

2
การแสดงข้อมูลเหตุการณ์ที่ขยายของเซิร์ฟเวอร์ SQL
เมื่อเร็ว ๆ นี้ฉันได้สำรวจโดยใช้ Extended Events ใน SQL Server เพื่อช่วยฉันเปรียบเทียบและเพิ่มประสิทธิภาพการค้นหาต่างๆ จนถึงตอนนี้เพื่อดูข้อมูลเหตุการณ์ที่ฉันใช้คุณลักษณะ "ดูข้อมูลสด" ใน SSMS ปัญหาที่ฉันพบคือปรากฏว่าฟีเจอร์ Live Events ใช้บัฟเฟอร์ภายในซึ่งหมายความว่าบางครั้งฉันต้องเรียกใช้แบบสอบถามหลายครั้งเพื่อรับข้อมูลเพื่อแสดงในหน้าต่าง ฉันจึงมีคำถามสองส่วนที่จะถาม: มีวิธีใดที่จะหลีกเลี่ยงความล่าช้านี้ในการรับเหตุการณ์ที่จะแสดงในฟีดสดหรือไม่? (ฉันกำลังทำสิ่งนี้ในฐานข้อมูลท้องถิ่นดังนั้นประสิทธิภาพจึงไม่เป็นปัญหา) ฟีดข้อมูลสดเป็นวิธีที่ดีที่สุดในการแสดงภาพข้อมูลกิจกรรมเพิ่มเติมหรือไม่ มีเครื่องมืออื่นใน SSMS หรือไม่ที่ปรับให้เข้ากับกรณีการใช้งานของฉันได้ดีขึ้น? UPDATE ตามที่ร้องขอนี่คือเซสชัน: CREATE EVENT SESSION [Simple Query Benchmarking] ON SERVER ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1) ACTION(sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text) WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[greater_than_uint64]([duration],(1000)))) ADD TARGET package0.ring_buffer WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=1 SECONDS,MAX_EVENT_SIZE=0 …

1
ขยายระยะเวลาเหตุการณ์มิลลิวินาทีหรือไมโครวินาที?
มีคำถามในฟอรัมนี้เกี่ยวกับmodule_endหน่วยระยะเวลาขยายกิจกรรมซึ่งฉันตอบ รายละเอียดที่นี่ มันเป็นไมโครวินาทีสำหรับเหตุการณ์ทั้งหมดหรือไม่

1
จำนวนการกระทำที่ถูกผูกไว้สูงสุดที่อนุญาตสำหรับเหตุการณ์ที่ขยายคืออะไร
หากคุณเพิ่มการกระทำ "มากเกินไป" ให้กับกิจกรรมในเซสชันกิจกรรมคุณจะได้รับข้อผิดพลาดนี้: ข่าวสารเกี่ยวกับ 25639, ระดับ 16, สถานะ 23, บรรทัด 1 เหตุการณ์ "[ชื่อเหตุการณ์]" เกินจำนวนการดำเนินการที่ผูกไว้ที่อนุญาต อนุญาตให้มีการกระทำกี่ครั้ง มันแตกต่างกันไปตามเหตุการณ์? คำตอบขึ้นอยู่กับการทดลองดูเหมือนจะเป็น sqlserver.rpc_completed27 แต่ฉันไม่ได้พบหมายเลขบนใด ๆ ที่เอกสารไมโครซอฟท์ และดูเหมือนว่าจะแตกต่างกันไปจากเหตุการณ์ที่ผมก็สามารถที่จะได้รับ sqlserver.sql_batch_completed30 รหัสตัวอย่างที่ล้มเหลว: CREATE EVENT SESSION [Test] ON SERVER ADD EVENT sqlserver.rpc_completed( ACTION( package0.callstack, package0.collect_cpu_cycle_time, package0.collect_current_thread_id, package0.collect_system_time, package0.event_sequence, package0.last_error, package0.process_id, sqlos.cpu_id, sqlos.numa_node_id, sqlos.scheduler_address, sqlos.scheduler_id, sqlos.system_thread_id, sqlos.task_address, sqlos.task_elapsed_quantum, sqlos.task_resource_group_id, sqlos.task_resource_pool_id, …

1
ฉันจะทำลาย XML ของเหตุการณ์ขยายนี้ได้เร็วที่สุดเท่าที่จะเป็นไปได้อย่างไร
ฉันสร้างเซสชันเพิ่มเติมในเหตุการณ์ใน SQL Server 2008 R2 เซสชั่นจะทำงานและรวบรวมกิจกรรมตามที่เกิดขึ้นเช่นเดียวกับที่คุณคาดหวัง ถ้าฉันฉีก xml เมื่อมีเหตุการณ์ค่อนข้างน้อยประสิทธิภาพเป็นที่ยอมรับได้ เมื่อฉันมีเหตุการณ์นับพันใช้เวลานานในการฉีก xml ฉันรู้ว่าฉันกำลังทำสิ่งผิดปกติฉันไม่มีความรู้เพียงพอเกี่ยวกับ internals ของเอ็นจิน XML เพื่อทำความเข้าใจกับสิ่งที่ นี่คือคำจำกัดความของเซสชันเพิ่มเติมของฉัน: IF EXISTS ( SELECT 1 FROM sys.server_event_sessions dxs WHERE dxs.name = 'queries' ) BEGIN IF EXISTS ( SELECT 1 FROM sys.dm_xe_sessions dxs WHERE dxs.name = 'queries' ) BEGIN ALTER EVENT SESSION queries ON …

1
SQL Extended Events Session สำหรับการตรวจจับการชะงักงัน
มีวิธีในการเพิ่มขนาดของ<inputbuf>องค์ประกอบในการหยุดชะงัก XML ที่บันทึกโดยเซสชันเหตุการณ์ที่เพิ่มขึ้นของการหยุดชะงักหรือไม่? เราต้องการดูแบบสอบถามที่สมบูรณ์เพื่อช่วยระบุปัญหาในรหัสแอปพลิเคชัน ดูเหมือนว่าจะถูก จำกัด ที่ 1024 อักขระ +/- จะเพิ่มขึ้นได้ไหม ดูตัวอย่าง XML ด้านล่าง คุณจะเห็นว่าข้อความค้นหาใน<inputbuf>องค์ประกอบนั้นถูกตัดกลางรายการที่เลือก: <deadlock> <victim-list> <victimProcess id="processc9c0829848" /> </victim-list> <process-list> <process id="processc9c0829848" taskpriority="0" logused="0" waitresource="PAGE: 5:1:40600276 " waittime="696" ownerId="255115931225" transactionname="SELECT" lasttranstarted="2019-04-24T09:29:25.950" XDES="0xc8dfa8da40" lockMode="S" schedulerid="13" kpid="8480" status="suspended" spid="245" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-04-24T09:29:25.950" lastbatchcompleted="2019-04-24T09:29:25.950" lastattention="1900-01-01T00:00:00.950" clientapp="EntityFramework" hostname="MSR-PRD-BDB02" hostpid="43440" loginname="IUSR_BuildDB" …

1
การใช้กระบวนการไม่ถูกต้องจากเหตุการณ์ที่เพิ่มความสมบูรณ์ของระบบหรือไม่
ฉันเพิ่งทำงานเกี่ยวกับการทำความเข้าใจข้อมูลหรือตัวชี้วัดที่ถูกเก็บไว้ในไฟล์เหตุการณ์ขยายระบบสุขภาพ เรากำลังพยายามใช้การรวบรวมข้อมูลของตัวชี้วัดประสิทธิภาพโดยใช้ความสมบูรณ์ของระบบตามที่ระบุไว้ที่นี่ มีรายงานที่ให้ตัวชี้วัดเช่นการใช้ CPU, การใช้งานกระบวนการอื่น ๆ ที่รวบรวมจากเหตุการณ์สถานะระบบ scheduler_monitor_system_health_ring_buffer_recorded ฉันไม่สามารถเข้าใจเซิร์ฟเวอร์ไม่กี่แห่งของฉันได้เพราะเหตุใดฟิลด์ "process_utilization" ซึ่งแสดงอยู่ในรายงานเนื่องจากการใช้งาน CPU CPU นั้นใช้เวลาส่วนใหญ่มากกว่า 100 เวลาสูงสุดในช่วงเวลาสูงสุดจะแตกต่างกันระหว่าง 120-160 และเพราะรายงานนั้น แสดง CPU ที่สูงกว่า 100 เสมอแม้ว่าฉันจะตรวจสอบจากเซิร์ฟเวอร์กิจกรรมการตรวจสอบที่ไม่เคยกรณี ฉันได้หยิบยกปัญหานี้ขึ้นใน Github แต่ดูเหมือนไม่มีการแก้ไขหรือตอบสนอง ดังนั้นคำถามของฉันจะเป็น ฉันจะได้รับหมายเลขที่ถูกต้องสำหรับการใช้งาน CPU CPU สำหรับเซิร์ฟเวอร์ของฉันโดยใช้บัฟเฟอร์เสียงเรียกทำงานระบบได้อย่างไร? รายงานยังแสดงตัวนับสำหรับเขตข้อมูลด้านล่าง 2 คำนวณจากรายงานของพวกเขา 100-System_idle-process_utilization เป็น OtherProcessUtil 100-system_idle เป็น SystemUtil OtherProcessUtilและSystemUtilเหล่านี้มีความจำเป็น / มีประโยชน์สำหรับอะไร? ฉันยังเห็นการใช้หน่วยความจำทุกครั้งที่แสดงเป็น 100 ซึ่งดูไม่ถูกต้องเช่นกัน มีใครสังเกตเห็นไหม เครื่องมืออื่น ๆ เช่น …

1
เมื่อคุณมี“ sql_exit_invoked” ใน System Health หมายความว่าอย่างไร
ฉันมีปัญหากับหนึ่งในเซิร์ฟเวอร์มาตรฐาน SQL Server 2016 ฉันมีเซิร์ฟเวอร์ที่ใช้งานจริง 8 แห่งและเซิร์ฟเวอร์นี้เป็นเซิร์ฟเวอร์เดียวที่ล้มเหลวแบบสุ่มโดยไม่มีการติดตามในบันทึก ฉันเปิดใช้งาน system_health อยู่ ฉันสังเกตเห็นว่าฉันมีแถวในแม่มดสุขภาพระบบคือ "sql_exit_invoked" ฉันพยายามหาข้อมูลเพิ่มเติมในแถวนั้น มันหมายความว่าอะไร? ข้อมูลเดียวที่ฉันค้นพบผ่านอินเทอร์เน็ตคือมันเกิดขึ้นเมื่อ SQLExit () ถูกเรียกใช้และมันถูกบันทึกไว้ตั้งแต่ SQL 2012 (ลิงก์มีอยู่ในเว็บไซต์ msdn ) ดังนั้นคำถามของฉันคือ: ฉันควรกังวลที่จะเห็นสิ่งนี้ในบันทึกของฉัน? ฉันพบสิ่งนี้บนเซิร์ฟเวอร์ที่มีปัญหาของฉันเท่านั้นไม่ใช่เซิร์ฟเวอร์อื่น ๆ อีก 7 เครื่อง (ทั้งหมดเป็นรุ่นมาตรฐานของ SQL Server 2016) ใครสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้กับฉันได้บ้าง

1
ไม่สามารถดูข้อมูลสดบนเซสชันที่ขยายกิจกรรม
ฉันใช้ SQL Server 2014 Developer Edition บนพีซีของฉัน ฉันกำลังพยายามดูข้อมูลในเซสชัน system_health ใน SSMS ฉันได้เชื่อมต่อกับฐานข้อมูลขยายเซิร์ฟเวอร์ / การจัดการ / เหตุการณ์ขยาย / เซสชัน ฉันเห็น AlwaysON_health (หยุดทำงาน) และ system_health (กำลังทำงาน) เมื่อฉันคลิกขวาที่เซสชัน system_health ฉันได้รับข้อผิดพลาดต่อไปนี้: ที่เก็บข้อมูลล้มเหลวในการเริ่มต้นโดยใช้พารามิเตอร์ที่ให้มา (Microsoft.SqlServer.XEventStorage) ไม่พบเซสชันเพิ่มเติมที่ชื่อว่า "system_health" ตรวจสอบให้แน่ใจว่าเซสชันนั้นมีอยู่และเริ่มขึ้นแล้ว (Microsoft SQL Server ข้อผิดพลาด: 25728) ฉันขยาย system_health และดูเป้าหมาย package0.event_file และ package0.ring_buffer หากฉันคลิกขวาที่เป้าหมายและเลือก "ดูข้อมูลเป้าหมาย" ฉันได้รับข้อผิดพลาดนี้: ที่เก็บข้อมูลล้มเหลวในการเริ่มต้นโดยใช้พารามิเตอร์ที่ให้มา (Microsoft.SqlServer.XEventStorage) ไม่สามารถดูฟังก์ชัน 'fn_MSXe_read_event_stream' …

1
การรวบรวมค่าพารามิเตอร์จากเซสชันเหตุการณ์เพิ่มเติม
ฉันใช้กิจกรรมเพิ่มเติมเพื่อติดตามข้อความที่ใช้โดยแอปพลิเคชันของเรา ผมได้สร้างเซสชั่นที่จะเก็บรวบรวมข้อมูลที่ฉันต้องการยกเว้นว่าผมยังต้องการที่จะรู้ว่าเป็นค่าที่แท้จริงของพารามิเตอร์ที่ใช้ ฉันกำลังดำเนินการติดตามนี้ในสภาพแวดล้อมที่ไม่ใช่การผลิตและประสิทธิภาพการทำงานใด ๆ ที่เกิดจากการติดตามเป็นที่ยอมรับได้ ข้อความค้นหาทั้งหมดมาจาก Hibernate และได้รับการกำหนดพารามิเตอร์ในรูปแบบของ: SELECT a, b, c From Customer where CustomerId = @P0 นี่คือการตั้งค่าเซสชันของฉัน CREATE EVENT SESSION [TracingForStatements] ON SERVER ADD EVENT sqlserver.sp_statement_completed ( ACTION ( sqlserver.session_id, package0.collect_system_time, sqlserver.transaction_id, package0.event_sequence ) WHERE ( sqlserver.database_id=555 ) ) ADD TARGET package0.ring_buffer(SET max_memory= 128000) WITH (EVENT_RETENTION_MODE = NO_EVENT_LOSS, …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.