คำถามติดแท็ก performance-tuning

การปรับปรุงลักษณะการทำงานของแอปพลิเคชันหรือระบบฐานข้อมูล

6
ทำไมการเพิ่ม TOP 1 ถึงทำให้ประสิทธิภาพแย่ลงอย่างเห็นได้ชัด?
ฉันมีคำถามที่ค่อนข้างง่าย SELECT TOP 1 dc.DOCUMENT_ID, dc.COPIES, dc.REQUESTOR, dc.D_ID, cj.FILE_NUMBER FROM DOCUMENT_QUEUE dc JOIN CORRESPONDENCE_JOURNAL cj ON dc.DOCUMENT_ID = cj.DOCUMENT_ID WHERE dc.QUEUE_DATE <= GETDATE() AND dc.PRINT_LOCATION = 2 ORDER BY cj.FILE_NUMBER นั่นทำให้ฉันมีประสิทธิภาพที่น่ากลัว (อย่างที่ไม่เคยใส่ใจที่จะรอให้มันจบ) แผนแบบสอบถามมีลักษณะดังนี้: อย่างไรก็ตามถ้าฉันลบTOP 1แผนการที่มีลักษณะเช่นนี้ออกและทำงานใน 1-2 วินาที: แก้ไข PK & การทำดัชนีด้านล่าง ความจริงที่ว่าTOP 1แผนการสืบค้นที่เปลี่ยนแปลงนั้นไม่ได้ทำให้ฉันแปลกใจ แต่ฉันก็แปลกใจนิดหน่อยที่มันทำให้แย่ลงไปอีกมาก หมายเหตุ: ฉันได้อ่านผลลัพธ์จากโพสต์นี้และเข้าใจแนวคิดของRow Goalสิ่งอื่น ๆ แล้วสิ่งที่ฉันอยากรู้คือฉันจะเปลี่ยนการสืบค้นอย่างไรเพื่อที่จะใช้แผนการที่ดีกว่า ขณะนี้ฉันกำลังทิ้งข้อมูลลงในตารางชั่วคราวแล้วดึงแถวแรกออกมา …

2
ทริกเกอร์รวบรวมในแต่ละครั้งหรือไม่
เรากำลังแก้ไขปัญหาเซิร์ฟเวอร์ที่มีการใช้งาน CPU สูง หลังจากพบว่าคำค้นหาไม่ได้เป็นสาเหตุของปัญหาจริงๆเราเริ่มมองหาการรวบรวม การตรวจสอบประสิทธิภาพแสดงน้อยกว่า 50 การคอมไพล์ / วินาทีและน้อยกว่า 15 การคอมไพล์ / วินาที หลังจากใช้งานเซสชัน XE เพื่อค้นหาการรวบรวมเราจะเห็นการรวบรวมนับพันต่อวินาที ระบบนี้ใช้ทริกเกอร์เพื่อตรวจสอบการเปลี่ยนแปลง การรวบรวมส่วนใหญ่เกิดจากทริกเกอร์ ทริกเกอร์การอ้างอิง sys.dm_tran_active_transactions ความคิดแรกของเราคือการอ้างอิง DMV ในทริกเกอร์อาจทำให้คอมไพล์ในแต่ละครั้งหรืออาจเป็นเพียง DMV ที่เจาะจงนี้จะทำให้เกิดขึ้น ดังนั้นฉันจึงเริ่มทดสอบทฤษฎีนั้น มันจะรวบรวมในแต่ละครั้ง แต่ฉันไม่ได้ตรวจสอบว่ามีการทริกเกอร์รวบรวมในแต่ละครั้งจะถูกเรียกเมื่อมันไม่ได้อ้างอิง DMV และแทน hardcodes ค่า มันยังคงรวบรวมทุกครั้งที่มันถูกเรียก การปล่อยไกหยุดการรวบรวม เรากำลังใช้ sqlserver.query_pre_execution_showplan ในเซสชั่น XE เพื่อติดตามการคอมไพล์ ทำไมจึงมีความคลาดเคลื่อนระหว่างสิ่งนั้นกับตัวนับ PerfMon เป็นเรื่องปกติหรือไม่ที่คุณได้รับเหตุการณ์การคอมไพล์ทุกครั้งที่ทริกเกอร์รัน? สคริปต์ Repro: CREATE TABLE t1 (transaction_id int, Column2 …

3
ชุดข้อมูลเชิงพื้นที่ขนาดใหญ่ (> 22 ล้านล้านรายการ) พร้อมประสิทธิภาพการสืบค้นอย่างรวดเร็ว (<1s)
ฉันอยู่ในกระบวนการออกแบบระบบใหม่สำหรับชุดข้อมูลเชิงพื้นที่ขนาดใหญ่ที่ต้องการประสิทธิภาพการสืบค้นอย่างรวดเร็ว ดังนั้นฉันต้องการดูว่าใครคิดว่าเป็นไปได้หรือมีประสบการณ์ / คำแนะนำเกี่ยวกับ DBMSs ที่เหมาะสมโครงสร้างข้อมูลหรือวิธีการทางเลือกเพื่อให้ได้ประสิทธิภาพตามที่ต้องการในสถานการณ์ต่อไปนี้: ข้อมูลจะถูกผลิตอย่างต่อเนื่องจากข้อมูลเรดาร์ดาวเทียมที่ผ่านการประมวลผลซึ่งจะครอบคลุมทั่วโลก จากความละเอียดของดาวเทียมและพื้นที่ครอบคลุมของโลกฉันประเมินชุดข้อมูลทั้งหมดเพื่อสร้างมูลค่าที่ 75 พันล้านตำแหน่งโดยสิ้นเชิงในโลก ตลอดช่วงชีวิตของดาวเทียมดวงเดียวเอาต์พุตจะสร้างค่าได้สูงสุด 300 ค่าในแต่ละตำแหน่งเหล่านี้ (ดังนั้นชุดข้อมูลทั้งหมดที่มีค่า&gt; 22 ล้านล้านค่า) นี่เป็นดาวเทียมหนึ่งดวงและมีวงโคจรอยู่หนึ่งวินาทีและอีกสองวางแผนในไม่กี่ปีใหม่ ดังนั้นจะมีข้อมูลจำนวนมาก! รายการข้อมูลเดียวนั้นง่ายมากและจะประกอบไปด้วย (ลองจิจูด, ค่าละติจูด, ค่า) แต่เนื่องจากจำนวนรายการที่ฉันประเมินดาวเทียมหนึ่งดวงเพื่อผลิตสูงสุด 100TB ข้อมูลที่เป็นลายลักษณ์อักษรไม่ควรต้องมีการอัพเดทเนื่องจากจะเพิ่มขึ้นเมื่อมีการดำเนินการจัดหาดาวเทียมใหม่ ประสิทธิภาพการเขียนไม่สำคัญ แต่ประสิทธิภาพการอ่านมีความสำคัญ เป้าหมายของโครงการนี้คือเพื่อให้สามารถมองเห็นข้อมูลผ่านอินเทอร์เฟซแบบง่ายเช่นเลเยอร์เหนือแผนที่ google ซึ่งแต่ละจุดมีค่าสีตามค่าเฉลี่ยการไล่ระดับสีหรือฟังก์ชันบางช่วงเวลา (สาธิตที่ส่วนท้ายของโพสต์) จากข้อกำหนดเหล่านี้ฐานข้อมูลจะต้องสามารถปรับขนาดได้และเรามีแนวโน้มที่จะมองหาโซลูชั่นระบบคลาวด์ ระบบจะต้องสามารถจัดการกับข้อความค้นหาเชิงพื้นที่เช่น "points near (lat, lon)" และ "points within (box)" และมีประสิทธิภาพการอ่าน &lt;1s สำหรับการหาจุดเดียวและรูปหลายเหลี่ยมที่มีถึง 50,000 คะแนน (ถึง 200,000 คะแนนน่าจะดีกว่า) จนถึงตอนนี้ฉันมีชุดข้อมูลทดสอบ …

4
ดัชนีในคอลัมน์ข้อมูลควรจะไม่เป็นแบบคลัสเตอร์หรือไม่?
สำหรับตารางที่มีคอลัมน์ข้อมูลประจำตัวควรสร้างดัชนี PK / ไม่ซ้ำกันแบบคลัสเตอร์หรือไม่เป็นคลัสเตอร์สำหรับคอลัมน์ข้อมูลประจำตัวหรือไม่ เหตุผลคือดัชนีอื่น ๆ จะถูกสร้างขึ้นสำหรับการค้นหา แบบสอบถามที่ใช้ดัชนี nonclustered (บนฮีป) และส่งกลับคอลัมน์ที่ไม่ครอบคลุมโดยดัชนีจะใช้ตรรกะ I / O (LIO) น้อยลงเนื่องจากไม่มีดัชนี b-tree ที่ทำคลัสเตอร์พิเศษค้นหาขั้นตอน? create table T ( Id int identity(1,1) primary key, -- clustered or non-clustered? (surrogate key, may be used to join another table) A .... -- A, B, C have mixed data type …

2
คำถามเกี่ยวกับประสิทธิภาพของ "SELECT TOP"
ฉันมีข้อความค้นหาที่ทำงานเร็วขึ้นมากเมื่อเลือกtop 100และช้ากว่าโดยไม่top 100เลือก จำนวนระเบียนที่ส่งคืนคือ 0 คุณสามารถอธิบายความแตกต่างในแผนคิวรีหรือแชร์ลิงก์ที่อธิบายความแตกต่างดังกล่าวได้หรือไม่ แบบสอบถามที่ไม่มีtopข้อความ: SELECT --TOP 100 * FROM InventTrans JOIN InventDim ON InventDim.DATAAREAID = 'dat' AND InventDim.INVENTDIMID = InventTrans.INVENTDIMID WHERE InventTrans.DATAAREAID = 'dat' AND InventTrans.ITEMID = '027743' AND InventDim.INVENTLOCATIONID = 'КзРЦ Алмат' AND InventDim.ECC_BUSINESSUNITID = 'Казахстан'; แผนแบบสอบถามสำหรับข้างต้น (ไม่รวมtop): https://pastebin.com/cbtJpxFf สถิติ IO และ TIME (ไม่รวมtop): SQL Server …

2
Latin1_General_BIN ส่งผลกระทบต่อประสิทธิภาพเมื่อเปลี่ยนการเปรียบเทียบค่าเริ่มต้นของฐานข้อมูล
ฉันได้ตั้งค่าการเปรียบเทียบฐานข้อมูลเป็นLatin1_General_BINเพื่อทำการเปรียบเทียบสตริงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ สิ่งนี้จะส่งผลกระทบต่อประสิทธิภาพหรือไม่ มันจะมีผลกระทบกับการดำเนินงาน DML หรือ DDL ในฐานข้อมูลหรือไม่ ฐานข้อมูลมีอยู่แล้วในตาราง

4
SQL Server พบการร้องขอ I / O ที่ใช้เวลานานกว่า 15 วินาที
ในการผลิต SQL Server เรามีการกำหนดค่าดังต่อไปนี้: 3 เซิร์ฟเวอร์ Dell PowerEdge R630 ซึ่งรวมอยู่ในกลุ่มความพร้อมใช้งานทั้งหมด 3 เชื่อมต่อกับหน่วยเก็บข้อมูล Dell SAN เดียวซึ่งเป็นอาร์เรย์ RAID ในบางครั้งในระดับประถมศึกษาเราเห็นข้อความคล้ายกับด้านล่าง: SQL Server พบคำขอ I / O 11 รายการที่เกิดขึ้นในเวลานานกว่า 15 วินาทีเพื่อให้เสร็จสมบูรณ์ในไฟล์ [F: \ Data \ MyDatabase.mdf] ใน id ฐานข้อมูล 8 การจัดการไฟล์ OS คือ 0x0000000000001FBC ออฟเซ็ตของ I / O ที่ยาวล่าสุดคือ: 0x000004295d0000 ระยะเวลาของ I / O …

2
ทำไมการประมาณแถวของ SQL Server จึงเปลี่ยนเมื่อฉันเพิ่มคำแนะนำการเข้าร่วม
ฉันมีแบบสอบถามที่รวมตารางไม่กี่ตารางและทำงานได้ไม่ดีนัก - การประมาณแถวเป็นวิธีปิด (1,000 ครั้ง) และมีการเลือกการเข้าร่วมลูปซ้อนกันทำให้เกิดการสแกนหลายตาราง รูปร่างของแบบสอบถามค่อนข้างตรงไปตรงมามีลักษณะดังนี้: SELECT t1.id FROM t1 INNER JOIN t2 ON t1.id = t2.t1_id LEFT OUTER JOIN t3 ON t2.id = t3.t2_id LEFT OUTER JOIN t4 ON t3.t4_id = t4.id WHERE t4.id = some_GUID เล่นรอบกับแบบสอบถามฉันสังเกตเห็นว่าเมื่อฉันบอกเป็นนัย ๆ ให้ใช้การรวม Merge สำหรับการรวมอย่างใดอย่างหนึ่งมันทำงานเร็วขึ้นหลายครั้ง สิ่งนี้ฉันสามารถเข้าใจได้ - การรวมการผสานเป็นตัวเลือกที่ดีกว่าสำหรับข้อมูลที่เข้าร่วม แต่ SQL Server ไม่คาดการณ์ว่าจะเลือก …

2
วิธีติดตามการบล็อกที่เกิดขึ้นน้อยกว่าหนึ่งวินาที - SQL Server
ฉันกำลังพยายามแก้ไขปัญหาการบล็อกซึ่งเกิดขึ้นน้อยกว่าหนึ่งวินาที แอปพลิเคชัน OLTP นั้นมีความละเอียดอ่อนมากและต้องมีเวลาตอบสนองน้อยกว่า 200ms สำหรับการทำธุรกรรมบางอย่างตาม SLA ที่ตกลงกันไว้ เรามีปัญหาการเพิ่มระดับการล็อคด้วยการเปิดตัวรหัสใหม่ซึ่งเราสามารถแก้ไขได้ด้วยการลดขนาดแบทช์ในการอัปเดต แม้ว่าจะมีขนาดเล็ก แต่เราสงสัยว่า sp ใหม่บล็อกแถวเดียวกันกับที่ธุรกรรม OLTP กำลังอัปเดต ฉันต้องการค้นหาเซสชันที่กำลังถูกบล็อกและทรัพยากรกำลังรออยู่ ตามความเข้าใจของฉัน "เกณฑ์กระบวนการที่ถูกบล็อก" สามารถตั้งค่าได้อย่างน้อย 1 วินาทีและดังนั้นสิ่งนี้จะไม่จับการบล็อก ฉันกำลังทดลองกับ wait_info และ wait_completed x events มีวิธีอื่นที่เราสามารถติดตามสิ่งนี้ได้หรือไม่ ขอบคุณ

4
การจัดการกับ CXPACKET รอ - ตั้งค่าขีด จำกัด ต้นทุนสำหรับการขนาน
จากการติดตามคำถามก่อนหน้านี้เกี่ยวกับการแก้ไขปัญหาเว็บไซต์ SharePointอย่างสมบูรณ์ฉันสงสัยว่าฉันสามารถทำบางสิ่งเกี่ยวกับ CXPACKET ได้หรือไม่ ฉันรู้ว่าวิธีแก้ปัญหาข้อเข่ากระตุกคือการปิดความขนานทั้งหมดโดยการตั้งค่า MAXDOP เป็น 1 - ฟังดูเหมือนเป็นความคิดที่ไม่ดี แต่แนวคิดอื่นคือการเพิ่มเกณฑ์ต้นทุนก่อนที่จะเริ่มขนานกันเริ่มต้นที่ 5 สำหรับต้นทุนของแผนการดำเนินการค่อนข้างต่ำ ดังนั้นฉันจึงสงสัยว่ามีคำถามที่เขียนไว้แล้วว่าจะพบคำค้นหาที่มีค่าใช้จ่ายแผนปฏิบัติการสูงที่สุด (ฉันรู้ว่าคุณสามารถค้นหาสิ่งที่มีระยะเวลาดำเนินการสูงสุดและอื่น ๆ ได้) แต่เป็นต้นทุนแผนปฏิบัติการที่เรียกคืนได้ ด้วยหรือไม่) และนั่นก็จะบอกฉันด้วยว่ามีการดำเนินการค้นหาแบบขนานหรือไม่ ใครบ้างมีสคริปต์ดังกล่าวในมือหรือสามารถชี้ให้ฉันไปในทิศทางของมุมมอง DMV, DMF หรือแคตตาล็อกระบบอื่น ๆ ที่เกี่ยวข้องเพื่อค้นหาสิ่งนี้?

1
ปรับ PostgreSQL ให้เหมาะสมที่สุดสำหรับการปรับปรุง INSERTS และ bytea มากมาย
สิ่งที่เรามี (ซอฟต์แวร์): PostrgeSQL 9.3พร้อมการกำหนดค่าพื้นฐาน (ไม่มีการเปลี่ยนแปลงpostgresql.conf) Windows 7 64 บิต ฮาร์ดแวร์: Intel Core i7-3770 3.9 Ghz RAM 32 Gb WDC WD10EZRX-00L4HBAta ไดรฟ์ (1000Gb, SATA III) ดังนั้นเราต้องโหลดลงใน DB aprox 100.000.000แถวที่มีbyteaคอลัมน์และง่ายขึ้น500.000.000แถว (โดยไม่ LOBs) มี 2 varcharดัชนีในตารางที่ 1 (ความยาว 13, 19) และ 2 varcharดัชนีในตารางที่ 2 (18, 10 ความยาว) นอกจากนี้ยังมีลำดับสำหรับการสร้าง id สำหรับแต่ละตาราง ในตอนนี้การดำเนินการเหล่านี้กำลังทำอยู่กับการเชื่อมต่อ 8 แบบขนานกับขนาดแบตช์ …

2
ปรับการค้นหาให้เหมาะสมสำหรับ 25+ ล้านแถว
ฉันใช้ MS SQL และฉันต้องเรียกใช้แบบสอบถามหลายรายการในตารางเดียวกันในเกณฑ์ที่แตกต่างกัน ตอนแรกฉันเรียกใช้แบบสอบถามแต่ละรายการในตารางเดิมแม้ว่าพวกเขาทั้งหมดแชร์การกรองบางอย่าง (เช่นวันที่สถานะ) การดำเนินการนี้ใช้เวลานาน (ประมาณ 2 นาที) มีข้อมูลที่ซ้ำกันในแถวข้อมูลและดัชนีทั้งหมดไม่ได้เป็นคลัสเตอร์ ฉันสนใจเฉพาะคอลัมน์ 4 คอลัมน์สำหรับเกณฑ์ของฉันและผลลัพธ์ควรให้ผลลัพธ์การนับเท่านั้นสำหรับการค้นหาทั้งหมด คอลัมน์ที่ต้องการ: TABLE, FIELD, AFTER, DATEและมีดัชนีในแต่ละและDATETABLE หลังจากสร้างตารางชั่วคราวที่มีเฉพาะฟิลด์ที่ฉันต้องการมันลงไปเป็นเวลา 1:40 นาทีซึ่งยังแย่มาก CREATE TABLE #TEMP ( TABLE VARCHAR(30) NULL, FIELD VARCHAR(30) NULL, AFTER VARCHAR(1000) NULL, DATE DATETIME, SORT_ID INT IDENTITY(1,1) ) CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID) INSERT INTO #TEMP …

3
แปลงฟังก์ชัน Scalar เป็นฟังก์ชัน TVF สำหรับการประมวลผลแบบขนาน - ยังคงทำงานในโหมดอนุกรม
หนึ่งในแบบสอบถามของฉันทำงานในโหมดการดำเนินการแบบอนุกรมหลังจากวางจำหน่ายและฉันสังเกตเห็นว่ามีการใช้ฟังก์ชันใหม่สองรายการในมุมมองซึ่งอ้างอิงใน LINQ ไปยัง SQL Query ที่สร้างขึ้นจากแอปพลิเคชัน ดังนั้นฉันจึงแปลงฟังก์ชัน SCALAR เหล่านั้นเป็นฟังก์ชั่น TVF แต่คำถามก็ยังคงทำงานอยู่ในโหมดอนุกรม ก่อนหน้านี้ฉันได้แปลง Scalar เป็น TVF ในข้อความค้นหาอื่นและแก้ปัญหาการบังคับให้เรียกใช้งานอนุกรม นี่คือฟังก์ชันสเกลาร์: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER …

1
อัลกอริทึมที่อยู่เบื้องหลังผู้ประกอบการยกเว้นคืออะไร?
อัลกอริทึมภายในของวิธีการที่ตัวดำเนินการยกเว้นทำงานภายใต้การครอบคลุมใน SQL Server คืออะไร ภายในใช้แฮชของแต่ละแถวและเปรียบเทียบหรือไม่ David Lozinksi ได้ทำการศึกษาSQL: วิธีที่เร็วที่สุดในการแทรกบันทึกใหม่ที่ไม่มีอยู่จริงเขาแสดงให้เห็นว่าคำสั่งนั้นเร็วที่สุดสำหรับแถวจำนวนมาก อย่างใกล้ชิดกับผลลัพธ์ของเราด้านล่าง ข้อสันนิษฐาน: ฉันคิดว่าการเข้าร่วมด้านซ้ายจะเร็วที่สุดเนื่องจากจะเปรียบเทียบเพียง 1 คอลัมน์เท่านั้นยกเว้นจะใช้เวลานานที่สุดเนื่องจากต้องเปรียบเทียบคอลัมน์ทั้งหมด ด้วยผลลัพธ์เหล่านี้ตอนนี้ความคิดของเราคือยกเว้นโดยอัตโนมัติและใช้แฮชของแต่ละแถวภายในหรือไม่ ฉันดูยกเว้นแผนการดำเนินการและใช้แฮชบางอย่าง ความเป็นมา: ทีมของเราเปรียบเทียบตารางฮีปสองโต๊ะ ตาราง A แถวที่ไม่ได้อยู่ในตาราง B ถูกแทรกเข้าไปในตาราง B ตารางฮีป (จากระบบไฟล์ข้อความดั้งเดิม) ไม่มีคีย์ / guids / identifier หลัก บางตารางมีแถวที่ซ้ำกันดังนั้นเราจึงพบแฮชของแต่ละแถวและลบรายการที่ซ้ำกันออกและสร้างตัวระบุคีย์หลัก 1) อันดับแรกเราเรียกใช้คำสั่งยกเว้นยกเว้น (คอลัมน์แฮช) select * from TableA Except Select * from TableB, 2) จากนั้นเราก็วิ่งซ้ายเข้าร่วมเปรียบเทียบระหว่างสองตารางใน HashRowId select * …

1
sp_cursorprepexec ทำให้ 53 ล้านอ่าน?
เรากำลังเรียกใช้การติดตั้ง Dynamics AX 2012 ด้วย SQL Server 2012 ฉันรู้ว่าเคอร์เซอร์ไม่ควรใช้อีกต่อไป แต่ AX กำลังใช้มันและเราไม่สามารถเปลี่ยนพฤติกรรมนี้ดังนั้นเราจึงต้องทำงานกับมัน วันนี้ฉันได้รับข้อความค้นหาที่แย่มากโดยมีผู้อ่านมากกว่า 53 ล้านคนและเวลาดำเนินการมากกว่า 20 นาที ฉันตรวจสอบข้อความค้นหานี้ผ่านเครื่องมือตรวจสอบของเรา SentryOne declare @p1 int set @p1=1073773227 declare @p2 int set @p2=180158805 declare @p5 int set @p5=16 declare @p6 int set @p6=1 declare @p7 int set @p7=2 exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 bigint,@P2 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.