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

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

3
เรียงลำดับการรั่วไหลไปยัง tempdb เนื่องจาก varchar (สูงสุด)
บนเซิร์ฟเวอร์ที่มี 32GB เราใช้ SQL Server 2014 SP2 ที่มีหน่วยความจำสูงสุด 25GB เรามีสองตารางที่นี่คุณจะพบโครงสร้างที่เรียบง่ายของทั้งสองตาราง: CREATE TABLE [dbo].[Settings]( [id] [int] IDENTITY(1,1) NOT NULL, [resourceId] [int] NULL, [typeID] [int] NULL, [remark] [varchar](max) NULL, CONSTRAINT [PK_Settings] PRIMARY KEY CLUSTERED ([id] ASC) ) ON [PRIMARY] GO CREATE TABLE [dbo].[Resources]( [id] [int] IDENTITY(1,1) NOT NULL, [resourceUID] [int] NULL, CONSTRAINT …

1
ทำไมการเข้าร่วมการกำจัดไม่ทำงานกับ sys.query_store_plan
ต่อไปนี้เป็นการทำให้เข้าใจง่ายของปัญหาประสิทธิภาพที่พบกับ Query Store: CREATE TABLE #tears ( plan_id bigint NOT NULL ); INSERT #tears (plan_id) VALUES (1); SELECT T.plan_id FROM #tears AS T LEFT JOIN sys.query_store_plan AS QSP ON QSP.plan_id = T.plan_id; plan_idคอลัมน์เป็นเอกสารที่เป็นคีย์หลักของsys.query_store_planแต่แผนปฏิบัติการไม่ได้ใช้เข้าร่วมการกำจัดเป็นที่คาดว่าจะ: ไม่มีการคาดการณ์คุณลักษณะจาก DMV คีย์หลัก DMV plan_idไม่สามารถซ้ำแถวจากตารางชั่วคราวได้ A LEFT JOINถูกใช้ดังนั้นจึงไม่Tสามารถลบแถวออกได้ แผนการดำเนินการ เหตุใดจึงเป็นเช่นนี้และสิ่งใดที่สามารถทำได้เพื่อรับการเข้าร่วมการกำจัดที่นี่

2
ทุกชุดทำให้เกิดการคอมไพล์
เรามีแอปพลิเคชันบุคคลที่สามที่ส่งคำสั่ง T-SQL เป็นชุด ฐานข้อมูลโฮสต์อยู่ใน SQL Server 2016 Enterprise SP1 CU7, 16 คอร์และหน่วยความจำ 256GB เปิดใช้งานการปรับให้เหมาะสมที่สุดสำหรับ Ad-Hoc นี่เป็นตัวอย่างของการสอบถามที่กำลังดำเนินการ: exec sp_executesql N' IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT select field1, field2 from table1 where field1=@1 option(keep plan, keepfixed, loop join) select field3, field4 from table2 where field3=@1 option(keep plan, keepfixed, …

1
ปรับดัชนีให้เหมาะสมบนตารางแถว 2,135,044,521
ฉันมีปัญหา I / O กับตารางขนาดใหญ่ สถิติทั่วไป ตารางมีลักษณะสำคัญดังต่อไปนี้: สภาพแวดล้อม: ฐานข้อมูล Azure SQL (ระดับชั้นเป็น P4 พรีเมียม (500 DTU)) แถว: 2,135,044,521 พาร์ติชันที่ใช้ 1,275 ดัชนีคลัสเตอร์และพาร์ติชัน แบบ นี่คือการใช้ตาราง: CREATE TABLE [data].[DemoUnitData]( [UnitID] [bigint] NOT NULL, [Timestamp] [datetime] NOT NULL, [Value1] [decimal](18, 2) NULL, [Value2] [decimal](18, 2) NULL, [Value3] [decimal](18, 2) NULL, CONSTRAINT [PK_DemoUnitData] PRIMARY KEY …

2
คอลัมน์ที่ไม่เกี่ยวข้องมีผลต่อเวลาสอบถามของข้อความสั่งที่เลือกหรือไม่
ฉันแค่อยากรู้ สมมติว่าคุณมีตาราง 1 ล้านระเบียน / แถว select order_value from store.orders มันสร้างความแตกต่างหรือไม่ว่าตารางนั้นมี 1 เขตข้อมูล 2 เขตข้อมูลหรือ 100 เขตข้อมูลในเวลาสอบถามจริงหรือไม่ ฉันหมายถึงฟิลด์ทั้งหมดที่ไม่ใช่ "order_value" ตอนนี้ฉันกำลังผลักข้อมูลไปยังคลังข้อมูล บางครั้งฉันทิ้งเขตข้อมูลลงในตารางที่ "อาจใช้ในอนาคตสักวันหนึ่ง" - แต่พวกเขาไม่ได้ถูกสอบถามตอนนี้โดยอะไร ฟิลด์ 'ภายนอก' เหล่านี้จะมีผลต่อคำสั่งที่เลือกซึ่งไม่รวมไว้ทั้งโดยตรงหรือโดยอ้อม (ไม่ใช่ * ฉันหมายถึง)

1
ทำไมคำใบ้ READPAST ทำให้มุมมองที่จัดทำดัชนีถูกละเว้น?
ฉันกำลังตรวจสอบโดยใช้READPASTคำแนะนำเพื่อลดการล็อกทรัพยากรในระบบย่อยทางการเงินของแอปพลิเคชันของเรา ดูเหมือนจะเป็นวิธีที่ดีในการไปเพราะบันทึกการทำธุรกรรมทางการเงินนั้นเคยเพิ่มไม่เคยอัพเดทหรือลบ แถวเดียวที่จะถูกข้ามไปคือแถวใหม่ที่แทรกอยู่ภายในธุรกรรม พวกเขาไม่มีอยู่จริงกับโลกภายนอกจนกว่าจะมีการทำธุรกรรม อย่างไรก็ตามฉันสังเกตเห็นประสิทธิภาพการทำงานแย่ลงสำหรับการค้นหาที่ใช้มุมมองที่จัดทำดัชนีซึ่งฉันได้ใส่READPASTคำใบ้ไว้ เปรียบเทียบแผนแบบสอบถามมันดูเหมือนกับคำใบ้เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามเลือกที่จะไม่ใช้มุมมองที่จัดทำดัชนีและแทนที่จะกลับไปที่การรักษามันเหมือนมุมมองปกติ ฉันไม่แน่ใจว่าทำไมถึงเป็นเช่นนั้น ฉันคิดว่ามุมมองที่จัดทำดัชนีจะเหมือนกับดัชนีอื่น ๆ ในคีย์นั้นสามารถล็อกระหว่างการดำเนินการและการเพิ่มREADPASTจะทำงานในทำนองเดียวกัน SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST) WHERE isa.TotalOwedAmount = 0.0 SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WHERE isa.TotalOwedAmount = 0.0 การเพิ่มNOEXPANDคำใบ้ดูเหมือนจะใช้งานได้ แต่ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับสาเหตุที่READPASTทำให้เครื่องมือเพิ่มประสิทธิภาพคิวรีสร้างตัวเลือกนั้นตั้งแต่แรก (เป็นส่วนหนึ่งของคำตอบแบบเต็ม)

3
ดัชนีที่กรองจะใช้ก็ต่อเมื่อส่วนที่กรองอยู่ใน JOIN ไม่ใช่ WHERE
ฉันได้สร้างดัชนีที่กรองแล้วด้านล่าง แต่เมื่อฉันเรียกใช้ 2 คิวรีเพิ่มเติมลงดัชนีนี้จะถูกใช้สำหรับการค้นหาในตัวอย่างแรกที่มี END_DTTM ใน JOIN มากกว่าข้อที่ (นั่นคือข้อแตกต่างในแบบสอบถามเท่านั้น) . ใครช่วยอธิบายได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น การสร้างดัชนี CREATE NONCLUSTERED INDEX [ix_PATIENT_LIST_BESPOKE_LIST_ID_includes] ON [dbo].[PATIENT_LIST_BESPOKE] ( [LIST_ID] ASC, [END_DTTM] ASC ) WHERE ([END_DTTM] IS NULL) แบบสอบถาม DECLARE @LIST_ID INT = 3655 --This one seeks on the index SELECT PATIENT_LISTS.LIST_ID FROM DBO.PATIENT_LISTS LEFT JOIN DBO.PATIENT_LIST_BESPOKE ON PATIENT_LISTS.LIST_ID = …

2
ปรับปรุงคิวรีช้าลงหลังจากเปิดใช้งานดัชนีข้อความแบบเต็มของเซิร์ฟเวอร์ SQL
ฉันมีเว็บไซต์ asp.net ที่มีการแทรกอัปเดตและลบคิวรีที่เรียกใช้กับฐานข้อมูลของฉันมากมาย ไม่กี่วันที่ผ่านมาฉันสร้างดัชนีข้อความแบบเต็มในสองคอลัมน์ของหนึ่งในตาราง หลังจากนั้นฉันก็รู้ว่าเมื่อเว็บไซต์รันคิวรีการอัพเดตบนตารางนั้นการใช้หน่วยความจำและดิสก์ของกระบวนการเซิร์ฟเวอร์ SQL กำลังกระโดดและการอัปเดตช้าลง แบบสอบถามทำงานโดยไม่มีปัญหาประสิทธิภาพใด ๆ ก่อนสร้างดัชนีข้อความแบบเต็ม ฉันยังตระหนักว่าแบบสอบถามแบบใช้ปรับปรุงที่ง่ายมากมาก่อนตอนนี้มีความซับซ้อนเนื่องจากแผนการดำเนินการในขณะนี้มีสิ่งต่าง ๆ เช่นการปรับปรุงดัชนีข้อความแบบเต็ม นี่เป็นส่วนหนึ่งของแผนการดำเนินการใหม่ที่ซับซ้อนหลังจากเปิดใช้งานข้อความแบบเต็ม: ในบางชั่วโมงเมื่อฉันอัปเดตเนื้อหาของไซต์ฉันเรียกใช้คิวรีการอัปเดต 5,000 รายการและฉันคิดว่ากระบวนการจัดทำดัชนีข้อความแบบเต็มจะทำในแต่ละครั้งสำหรับแต่ละแถว ฉันควรจะปิดการใช้งานการสแกนข้อความเต็มในการเริ่มต้นของการปรับปรุงแถวและจากนั้นอีกครั้งเปิดใช้งานได้ (ในขณะที่คำถามที่เกี่ยวข้องนี้ )? ฉันสามารถบอกให้ SQL Server หยุดจัดทำดัชนีข้อความแบบเต็มเป็นเวลา 5 นาทีแล้วเริ่มสร้างดัชนีข้อมูลใหม่ได้หรือไม่ มีทางเลือกที่ดีกว่านี้อีกไหม? ฉันใช้ SQL Server 2012

1
เหตุใดจึงไม่ใช้คีย์หลัก (คลัสเตอร์) ในการสืบค้นนี้
ฉันมีตาราง SQL Server 2008 R2 ซึ่งโครงสร้างสกีมามีลักษณะดังนี้: CREATE TABLE [dbo].[CDSIM_BE] ( [ID] [bigint] NOT NULL, [EquipmentID] [varchar](50) NOT NULL, [SerialNumber] [varchar](50) NULL, [PyrID] [varchar](50) NULL, [MeasMode] [varchar](50) NULL, [ReadTime] [datetime] NOT NULL, [SubID] [varchar](15) NULL, [ProbePosition] [float] NULL, [DataPoint] [int] NULL, CONSTRAINT [PK_CDSIM_BE] PRIMARY KEY CLUSTERED ([ID] ASC, [EquipmentID] ASC, [ReadTime] …

2
ค้นหา fulltext ช้าเนื่องจากการประมาณการแถวไม่ถูกต้องอย่างดุร้าย
ข้อความค้นหาแบบเต็มกับฐานข้อมูลนี้ (การเก็บตั๋วRT ( Request Tracker )) ดูเหมือนจะใช้เวลานานมากในการดำเนินการ ตารางสิ่งที่แนบ (มีข้อมูลแบบเต็ม) ประมาณ 15GB สคีมาฐานข้อมูลมีดังนี้ประมาณ 2 ล้านแถว: rt4 = # \ d + ไฟล์แนบ ตาราง "public.attachments" คอลัมน์ | ประเภท | ตัวดัดแปลง | จัดเก็บข้อมูล | ลักษณะ ----------------- + ----------------------------- + - -------------------------------------------------- ------ ---------- + + ------------- id | จำนวนเต็ม ไม่ใช่ null ค่าเริ่มต้น nextval …

2
มีวิธีใดบ้างในการประเมินค่าใช้จ่ายในการดำเนินการสืบค้นใน MySQL หรือไม่?
ใน PostgreSQL นั้น EXPLAIN หรือ EXPLAIN ANALYZE จะแสดงค่าใช้จ่ายโดยประมาณในการดำเนินการสืบค้น แต่อธิบายใน MySQL ไม่ได้ให้ข้อมูลนี้ ฉันจะได้รับค่าประมาณโดยไม่ต้องติดตั้งเครื่องมืออื่น ๆ ได้อย่างไร ฉันใช้ MySQL-5.6.16

4
ช่องว่างและเกาะ: โซลูชันไคลเอ็นต์เทียบกับข้อความค้นหา T-SQL
โซลูชัน T-SQL สำหรับช่องว่างและหมู่เกาะสามารถทำงานได้เร็วกว่าโซลูชัน C # ที่ทำงานบนไคลเอนต์หรือไม่ หากต้องการเจาะจงให้เราให้ข้อมูลการทดสอบบางอย่าง: CREATE TABLE dbo.Numbers ( n INT NOT NULL PRIMARY KEY ) ; GO INSERT INTO dbo.Numbers ( n ) VALUES ( 1 ) ; GO DECLARE @i INT ; SET @i = 0 ; WHILE @i < 21 BEGIN INSERT INTO dbo.Numbers ( …

1
การปรับให้เหมาะสมของแบบสอบถาม: ช่วงเวลา
ในหลักฉันมีช่วงเวลาสองชนิด: presence time และ absence time absence time อาจเป็นประเภทที่แตกต่างกัน (เช่นตัวแบ่งการขาดวันพิเศษและอื่น ๆ ) และช่วงเวลาอาจทับซ้อนและ / หรือตัดกัน มันเป็นความไม่แน่นอนว่ามีเพียงการรวมกันเป็นไปได้ของช่วงเวลาที่มีอยู่ในข้อมูลดิบเช่น การทับซ้อนช่วงเวลาการแสดงตนไม่สมเหตุสมผล แต่อาจมีอยู่ ฉันพยายามระบุช่วงเวลาการแสดงตนที่เกิดขึ้นในหลาย ๆ ทางในตอนนี้สำหรับฉันความสะดวกสบายที่ดีที่สุดน่าจะเป็น follwing ;with "timestamps" as ( select "id" = row_number() over ( order by "empId", "timestamp", "opening", "type" ) , "empId" , "timestamp" , "type" , "opening" from ( select …

3
แบบสอบถามทั้งสองนี้เทียบเท่ากันอย่างมีเหตุผลหรือไม่
แบบสอบถามทั้งสองนี้เทียบเท่ากันอย่างมีเหตุผลหรือไม่ DECLARE @DateTime DATETIME = GETDATE() แบบสอบถาม 1 SELECT * FROM MyTable WHERE Datediff(DAY, LogInsertTime, @DateTime) > 7 แบบสอบถาม 2 SELECT * FROM MyTable WHERE LogInsertTime < @DateTime - 7 ถ้ามันไม่เท่ากันอย่างมีเหตุผลคุณช่วยให้ฉันมีเหตุผลเทียบเท่ากับการสืบค้นแรกเพื่อที่ WHERE clause สามารถใช้ดัชนีได้อย่างมีประสิทธิภาพ (เช่นกำจัดการตัดฟังก์ชั่น)?

3
ประสิทธิภาพ TSQL - เข้าร่วมกับมูลค่าระหว่างต่ำสุดและสูงสุด
ฉันมีสองตารางที่ฉันเก็บ: ช่วง IP - ตารางการค้นหาประเทศ รายการคำขอมาจาก IP ที่ต่างกัน IP ถูกเก็บไว้เป็นbigints เพื่อปรับปรุงประสิทธิภาพการค้นหา นี่คือโครงสร้างของตาราง: create table [dbo].[ip2country]( [begin_ip] [varchar](15) NOT NULL, [end_ip] [varchar](15) NOT NULL, [begin_num] [bigint] NOT NULL, [end_num] [bigint] NOT NULL, [IDCountry] [int] NULL, constraint [PK_ip2country] PRIMARY KEY CLUSTERED ( [begin_num] ASC, [end_num] ASC ) ) create table Request( Id …

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