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

สำหรับคำถามเกี่ยวกับการปรับปรุงประสิทธิภาพและ / หรือประสิทธิภาพของการสืบค้นฐานข้อมูล

4
ทำไมคำถามของฉันจึงช้ากว่าเมื่อวานเมื่อวาน?
[Memorial ~] (เลือกหนึ่งอัน) [ ] Well trained professional, [ ] Casual reader, [ ] Hapless wanderer, ฉันมี(เลือกทุกข้อที่ใช่) [ ] query [ ] stored procedure [ ] database thing maybe ที่ทำงานได้ดี(ถ้ามี) [ ] yesterday [ ] in recent memory [ ] at some point แต่ตอนนี้ช้าลงทันที ฉันได้ตรวจสอบแล้วเพื่อให้แน่ใจว่าไม่ได้ถูกบล็อกและไม่ใช่เหยื่อของงานการบำรุงรักษารายงานหรือกระบวนการนอกแบนด์ที่ยาวนาน ปัญหาคือสิ่งที่ฉันควรทำอย่างไรและฉันสามารถให้ข้อมูลใดได้บ้างเพื่อรับความช่วยเหลือ [*Insert appropriate closing remarks*]

4
แบบสอบถาม PostgreSQL เดียวสามารถใช้หลายคอร์ได้หรือไม่?
ในรุ่นล่าสุดของ PostgreSQL (ณ เดือนธันวาคม 2013) เราสามารถแบ่งปันแบบสอบถามระหว่างสองคอร์หรือมากกว่านั้นเพื่อรับประสิทธิภาพที่เพิ่มขึ้นได้หรือไม่ หรือเราควรจะได้รับแกนเร็วขึ้น?

6
ผลรวมสะสมช่วงวันที่โดยใช้ฟังก์ชั่นหน้าต่าง
ฉันต้องคำนวณผลรวมสะสมในช่วงวันที่ เพื่อแสดงให้เห็นถึงการใช้ฐานข้อมูลตัวอย่าง AdventureWorksไวยากรณ์สมมุติฐานต่อไปนี้จะทำสิ่งที่ฉันต้องการ: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = SUM(TH.ActualCost) OVER ( PARTITION BY TH.ProductID ORDER BY TH.TransactionDate RANGE BETWEEN INTERVAL 45 DAY PRECEDING AND CURRENT ROW) FROM Production.TransactionHistory AS TH ORDER BY TH.ProductID, TH.TransactionDate, TH.ReferenceOrderID; น่าเศร้าที่RANGEขนาดของกรอบหน้าต่างไม่อนุญาตให้มีช่วงเวลาใน SQL Server ฉันรู้ว่าฉันสามารถเขียนวิธีการใช้แบบสอบถามย่อยและการรวมปกติ (ไม่ใช่หน้าต่าง): SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = ( SELECT SUM(TH2.ActualCost) …

6
ฉันจะรับ "แถวที่สอดคล้องกันล่าสุด" อย่างมีประสิทธิภาพได้อย่างไร
ฉันมีรูปแบบแบบสอบถามที่ต้องพบบ่อยมาก แต่ฉันไม่รู้วิธีเขียนแบบสอบถามที่มีประสิทธิภาพ ฉันต้องการค้นหาแถวของตารางที่ตรงกับ "วันที่ล่าสุดไม่หลัง" แถวของตารางอื่น ฉันมีตารางinventoryพูดซึ่งแสดงถึงสินค้าคงคลังที่ฉันถือในวันหนึ่ง date | good | quantity ------------------------------ 2013-08-09 | egg | 5 2013-08-09 | pear | 7 2013-08-02 | egg | 1 2013-08-02 | pear | 2 และโต๊ะ "ราคา" พูดซึ่งถือราคาสินค้าในวันที่กำหนด date | good | price -------------------------- 2013-08-07 | egg | 120 2013-08-06 | pear | …

5
ทำไมฉันจะไม่ใช้ตัวเลือก SQL Server“ ปรับให้เหมาะสมสำหรับปริมาณงานเฉพาะกิจ”?
ฉันได้อ่านบทความที่ยอดเยี่ยมเกี่ยวกับการแคชแผน SQL Server โดย Kimberly Tripp เช่นนี้: http://www.sqlskills.com/blogs/kimberly/plan-cache-and-optimizing-for-adhoc-workloads/ ทำไมถึงมีตัวเลือกในการ "เพิ่มประสิทธิภาพสำหรับปริมาณงานแบบเฉพาะกิจ"? สิ่งนี้ไม่ควรเกิดขึ้นหรือ ไม่ว่านักพัฒนาจะใช้ ad-hoc SQL หรือไม่ทำไมคุณไม่เปิดใช้งานตัวเลือกนี้ในทุกอินสแตนซ์ที่รองรับ (SQL 2008+) ซึ่งจะช่วยลดการขยายตัวของแคช?

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สิ่งอื่น ๆ แล้วสิ่งที่ฉันอยากรู้คือฉันจะเปลี่ยนการสืบค้นอย่างไรเพื่อที่จะใช้แผนการที่ดีกว่า ขณะนี้ฉันกำลังทิ้งข้อมูลลงในตารางชั่วคราวแล้วดึงแถวแรกออกมา …

3
ความแตกต่างในแผนการดำเนินการบนเซิร์ฟเวอร์ UAT และ PROD
ฉันต้องการที่จะเข้าใจว่าทำไมมันถึงมีความแตกต่างอย่างมากในการดำเนินการกับเคียวรีเดียวกันบน UAT (ทำงานใน 3 วินาที) เทียบกับ PROD (ทำงานใน 23 วินาที) ทั้ง UAT และ PROD มีข้อมูลและดัชนีอย่างแน่นอน ค้นหา: set statistics io on; set statistics time on; SELECT CONF_NO, 'DE', 'Duplicate Email Address ''' + RTRIM(EMAIL_ADDRESS) + ''' in Maintenance', CONF_TARGET_NO FROM CONF_TARGET ct WHERE CONF_NO = 161 AND LEFT(INTERNET_USER_ID, 6) != 'ICONF-' …

2
การเพิ่ม work_mem และ shared_buffers บน Postgres 9.2 ทำให้การสืบค้นช้าลงอย่างมาก
ฉันมีอินสแตนซ์ PostgreSQL 9.2 ที่ทำงานบน RHEL 6.3, เครื่อง 8-core พร้อม RAM ขนาด 16GB เซิร์ฟเวอร์ทุ่มเทให้กับฐานข้อมูลนี้ เนื่องจาก postgresql.conf เริ่มต้นค่อนข้างอนุรักษ์นิยมเกี่ยวกับการตั้งค่าหน่วยความจำฉันคิดว่าอาจเป็นความคิดที่ดีที่จะอนุญาตให้ Postgres ใช้หน่วยความจำเพิ่มเติม เพื่อประหลาดใจของฉันคำแนะนำต่อไปนี้ในwiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Serverชะลอตัวลงอย่างมากในทางปฏิบัติทุกแบบสอบถามที่ฉันเรียกใช้ ฉันยังลองใช้ pgtune ซึ่งให้คำแนะนำต่อไปนี้พร้อมปรับพารามิเตอร์เพิ่มเติม แต่นั่นก็ไม่ได้เปลี่ยนแปลงอะไรเลย มันแสดงให้เห็น shared_buffers ขนาด 1/4 ของ RAM ซึ่งดูเหมือนจะสอดคล้องกับคำแนะนำที่อื่น (และโดยเฉพาะกับ PG wiki โดยเฉพาะ) default_statistics_target = 50 maintenance_work_mem = 960MB constraint_exclusion = on checkpoint_completion_target = 0.9 effective_cache_size = 11GB work_mem …

2
การกำหนดค่า PostgreSQL สำหรับประสิทธิภาพการอ่าน
ระบบของเราเขียนข้อมูลจำนวนมาก (ระบบ Big Data) ประสิทธิภาพการเขียนดีพอสำหรับความต้องการของเรา แต่ประสิทธิภาพการอ่านช้าเกินไป โครงสร้างคีย์หลัก (ข้อ จำกัด ) มีความคล้ายคลึงกับตารางทั้งหมดของเรา: timestamp(Timestamp) ; index(smallint) ; key(integer). ตารางสามารถมีได้หลายล้านแถวแม้กระทั่งหลายพันล้านแถวและการร้องขอการอ่านมักจะเป็นช่วงเวลาที่ระบุ (การประทับเวลา / ดัชนี) และแท็ก เป็นเรื่องปกติที่มีข้อความค้นหาที่ส่งกลับประมาณ 200k บรรทัด ขณะนี้เราสามารถอ่านประมาณ 15k บรรทัดต่อวินาที แต่เราต้องเร็วขึ้น 10 เท่า เป็นไปได้และถ้าเป็นเช่นนั้นได้อย่างไร หมายเหตุ: PostgreSQL นั้นมาพร้อมกับซอฟต์แวร์ของเราดังนั้นฮาร์ดแวร์จึงแตกต่างจากไคลเอนต์หนึ่งไปอีกไคลเอนต์หนึ่ง มันเป็น VM ที่ใช้สำหรับการทดสอบ โฮสต์ของ VM คือ Windows Server 2008 R2 x64 พร้อม RAM 24.0 GB ข้อมูลจำเพาะเซิร์ฟเวอร์ …

2
TOP (และทำไม) ส่งผลกระทบต่อแผนการดำเนินการอย่างไร
สำหรับข้อความค้นหาที่ซับซ้อนปานกลางที่ฉันพยายามปรับให้เหมาะสมฉันสังเกตว่าการลบTOP nคำสั่งเปลี่ยนแผนการดำเนินการ ฉันจะเดาว่าเมื่อเคียวรีมีเอ็นจินTOP nฐานข้อมูลจะรันเคียวรีโดยไม่สนใจTOPคำสั่งและจากนั้นในตอนท้ายก็ลดขนาดของผลลัพธ์ที่กำหนดไว้เป็นจำนวนแถวnที่ถูกร้องขอ แผนการดำเนินการกราฟิกดูเหมือนว่าจะระบุว่าเป็นกรณีนี้ - TOPเป็นขั้นตอน "สุดท้าย" แต่ดูเหมือนว่าจะเกิดขึ้นมากขึ้น คำถามของฉันคือประโยค TOP และ N มีผลอย่างไรต่อแผนการดำเนินการของแบบสอบถาม นี่เป็นเวอร์ชั่นที่เรียบง่ายของสิ่งที่เกิดขึ้นในกรณีของฉัน: แบบสอบถามกำลังจับคู่แถวจากสองตาราง A และ B โดยไม่ต้องTOPเป็นไปตามข้อเพิ่มประสิทธิภาพประเมินจะมี 19k แถวจากตารางและ 46K แถวจากตาราง B. จำนวนที่เกิดขึ้นจริงของแถวกลับเป็น 16k สำหรับ A และ 13k สำหรับการแข่งขันบีกัญชาจะใช้ในการเข้าร่วมทั้งสองชุดผลลัพธ์ รวม 69 แถว (จากนั้นจะใช้การเรียงลำดับ) แบบสอบถามนี้เกิดขึ้นอย่างรวดเร็วมาก เมื่อฉันเพิ่มTOP 1001เครื่องมือเพิ่มประสิทธิภาพไม่ได้ใช้แฮชจับคู่; แต่ก่อนจะเรียงลำดับผลลัพธ์จากตาราง A (ประมาณเดียวกัน / เป็นจริงของ 19k / 16k) และทำการวนซ้ำซ้อนกับตาราง B จำนวนแถวของตาราง …



3
วิธีเพิ่มความเร็วคิวรีในตาราง 220 ล้านแถวขนาดใหญ่ (ข้อมูล 9 กิกะไบต์)
ปัญหา: เรามีเว็บไซต์โซเชียลที่สมาชิกสามารถให้คะแนนซึ่งกันและกันเพื่อความเข้ากันได้หรือการจับคู่ นี้user_match_ratingsตารางที่มีมากกว่า 220 ล้านแถว (9 ข้อมูลกิ๊กหรือเกือบ 20 กิ๊กในดัชนี) ข้อความค้นหาที่อยู่ในตารางนี้แสดงเป็นประจำใน slow.log (threshold> 2 วินาที) และเป็นข้อความค้นหาช้าที่บันทึกบ่อยที่สุดในระบบ Query_time: 3 Lock_time: 0 Rows_sent: 3 Rows_examined: 1051 "select rating, count(*) as tally from user_match_ratings where rated_user_id = 395357 group by rating;" Query_time: 4 Lock_time: 0 Rows_sent: 3 Rows_examined: 1294 "select rating, count(*) as tally …

5
ปรับปรุงประสิทธิภาพที่ไม่มีข้อมูลเปลี่ยนแปลง
ถ้าฉันมีUPDATEคำสั่งที่ไม่ได้เปลี่ยนข้อมูลใด ๆ (เพราะข้อมูลอยู่ในสถานะที่ปรับปรุงแล้ว) มีประโยชน์ด้านประสิทธิภาพใด ๆ ในการวางการตรวจสอบในWHEREข้อเพื่อป้องกันการอัพเดตหรือไม่? ตัวอย่างเช่นจะมีความแตกต่างในความเร็วการดำเนินการระหว่าง UPDATE 1 และ UPDATE 2 ในสิ่งต่อไปนี้: CREATE TABLE MyTable (ID int PRIMARY KEY, Value int); INSERT INTO MyTable (ID, Value) VALUES (1, 1), (2, 2), (3, 3); -- UPDATE 1 UPDATE MyTable SET Value = 2 WHERE ID = 2 AND Value <> …

1
เหตุใดการสแกนจึงเร็วกว่าการค้นหาคำนี้
ฉันสามารถสร้างปัญหาประสิทธิภาพการสืบค้นที่ฉันจะอธิบายได้อย่างไม่คาดคิด ฉันกำลังมองหาคำตอบที่มุ่งเน้นไปที่ภายใน บนเครื่องของฉันเคียวรีต่อไปนี้ทำการสแกนดัชนีแบบคลัสเตอร์และใช้เวลาประมาณ 6.8 วินาทีของเวลา CPU: SELECT ID1, ID2 FROM two_col_key_test WITH (FORCESCAN) WHERE ID1 NOT IN ( N'1', N'2',N'3', N'4', N'5', N'6', N'7', N'8', N'9', N'10', N'11', N'12',N'13', N'14', N'15', N'16', N'17', N'18', N'19', N'20' ) AND (ID1 = N'FILLER TEXT' AND ID2 >= N'' OR (ID1 > N'FILLER …

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