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

สถิติสำหรับการปรับให้เหมาะสมของแบบสอบถามเป็นวัตถุที่มีข้อมูลสถิติเกี่ยวกับการกระจายของค่าในหนึ่งคอลัมน์ขึ้นไปของตารางหรือมุมมองที่จัดทำดัชนี

2
ทำสถิติการอัพเดตดัชนีใหม่หรือไม่?
ฉันได้ทำหลักสูตร MS10775A เมื่อสัปดาห์ที่แล้วและมีคำถามหนึ่งข้อที่ผู้ฝึกสอนไม่สามารถตอบได้อย่างน่าเชื่อถือคือ: ดัชนีใหม่อัปเดตสถิติหรือไม่ เราพบว่าการสนทนาออนไลน์โต้เถียงทั้งที่เป็นอยู่และไม่เป็นเช่นนั้น

2
เมื่อต้องการอัปเดตสถิติ
ฉันได้รับแผนการบำรุงรักษาที่ได้รับสิ่งต่อไปนี้: ล้างข้อมูลเก่า ตรวจสอบความสมบูรณ์ของฐานข้อมูล ดำเนินการสำรองฐานข้อมูลและบันทึกธุรกรรม จัดระเบียบดัชนีของเราใหม่ อัพเดทสถิติ ลบการสำรองข้อมูลเก่าและไฟล์ Maintenance Plan จากแผนการบำรุงรักษา 23 นาทีการอัปเดตสถิติใช้เวลา 13 นาที ในช่วงเวลา 13 นาทีนี้การเข้าถึงฐานข้อมูลถูกปิดกั้น (หรืออย่างน้อยการจำลองแบบจากฐานข้อมูลนี้ไปยังผู้อื่นของเราจะถูกหยุดชั่วคราว) คำถามของฉันคือ: เราควรอัปเดตสถิติเมื่อใดและเพราะเหตุใด ดูเหมือนว่าสิ่งที่เราควรทำน้อยกว่าทุกวัน ฉันพยายามที่จะพาเราออกจาก "เพียงเพราะ" ความตั้งใจของการบำรุงรักษาที่ไม่จำเป็น

3
เมื่อใดควรสร้างสถิติแทนการสร้างดัชนี
ฉันได้พบข้อมูลมากมายเกี่ยวกับสิ่งที่ STATISTICS : วิธีการดูแลรักษาวิธีการสร้างด้วยตนเองหรือโดยอัตโนมัติจากแบบสอบถามหรือดัชนีและอื่น ๆ แต่ผมได้รับไม่สามารถที่จะหาใด ๆคำแนะนำหรือ "วิธีปฏิบัติที่ดีที่สุด" ข้อมูลเกี่ยวกับเมื่อเพื่อสร้าง: สถานการณ์ใดที่ได้ประโยชน์จากวัตถุสถิติที่สร้างขึ้นด้วยตนเองมากกว่าจากดัชนี ฉันได้เห็นสถิติที่สร้างขึ้นด้วยตนเองที่กรองแล้วช่วยสอบถามในตารางที่แบ่งพาร์ติชัน (เนื่องจากสถิติที่สร้างขึ้นสำหรับดัชนีครอบคลุมทั้งตารางและไม่ใช่ต่อพาร์ติชัน - ความสุกใส!) แต่แน่นอนว่าต้องมีสถานการณ์อื่น ๆ ที่จะได้รับประโยชน์จากวัตถุสถิติ ไม่ต้องการรายละเอียดของดัชนีหรือไม่คุ้มค่ากับการบำรุงรักษาดัชนีหรือเพิ่มโอกาสในการบล็อค / ล็อคตาย @JonathanFite ในความคิดเห็นพูดถึงความแตกต่างระหว่างดัชนีและสถิติ: ดัชนีจะช่วยให้ SQL ค้นหาข้อมูลได้เร็วขึ้นด้วยการสร้างการค้นหาที่เรียงลำดับแตกต่างจากตาราง สถิติช่วยให้ SQL พิจารณาว่าจำเป็นต้องใช้หน่วยความจำ / ความพยายามเท่าใดในการตอบแบบสอบถาม นั่นคือข้อมูลที่ดีส่วนใหญ่เป็นเพราะมันช่วยให้ฉันชี้แจงคำถามของฉัน: วิธีการที่ไม่ทราบนี้ (หรือข้อมูลทางเทคนิคอื่น ๆ ใด ๆ เกี่ยวกับสิ่งที่และวิธีการ s ที่เกี่ยวข้องกับพฤติกรรมและธรรมชาติของSTATISTICS) ช่วยตรวจสอบเมื่อให้เลือกCREATE STATISTICSมากกว่าCREATE INDEXโดยเฉพาะอย่างยิ่งเมื่อมีการสร้างดัชนีจะสร้างที่เกี่ยวข้องกับSTATISTICSวัตถุ? สถานการณ์ใดที่จะให้บริการที่ดีขึ้นโดยมีเพียงข้อมูลสถิติและไม่มีดัชนี มันจะเป็นซุปเปอร์ duper ประโยชน์ถ้าเป็นไปได้ที่จะมีตัวอย่างการทำงานของสถานการณ์ที่วัตถุที่เป็นแบบที่ดีกว่าSTATISTICSINDEX เนื่องจากฉันเป็นผู้เรียนด้วยสายตา / นักคิดฉันคิดว่ามันอาจช่วยให้เห็นความแตกต่างระหว่างSTATISTICSและINDEXes เคียงข้างกันเป็นวิธีที่เป็นไปได้ในการช่วยกำหนดว่าเมื่อใดSTATISTICSจะเป็นทางเลือกที่ดีกว่า …

1
sys.stats_columns ไม่ถูกต้องหรือไม่
สมมติว่าผมมีตารางFooที่มีคอลัมน์และคีย์หลักคอมโพสิตที่กำหนดไว้มากกว่าID1, ID2 ID2, ID1(ขณะนี้ฉันกำลังทำงานกับผลิตภัณฑ์ System Center ซึ่งมีหลายตารางที่กำหนดด้วยวิธีนี้กับคอลัมน์คีย์หลักที่แสดงรายการตามลำดับที่ตรงกันข้ามจะปรากฏในคำจำกัดความของตาราง) CREATE TABLE dbo.Foo( ID1 int NOT NULL, ID2 int NOT NULL, CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED (ID2, ID1) ); GO -- Add a row and update stats so that histogram isn't empty INSERT INTO Foo (ID1, ID2) VALUES (1,2); UPDATE STATISTICS dbo.Foo; key_ordinalคอลัมน์ในsys.index_columnsการแสดงคอลัมน์ดัชนีในลำดับเดียวกันพวกเขาถูกประกาศในคีย์หลักคอมโพสิต: …

1
สถิติเก็บอยู่ใน SQL Server อยู่ที่ไหน
สถิติที่ใช้โดยเครื่องมือเพิ่มประสิทธิภาพข้อความค้นหาเก็บอยู่ในไฟล์ฐานข้อมูล SQL Server และบัฟเฟอร์พูลหรือไม่ โดยเฉพาะอย่างยิ่งมีวิธีที่จะคิดออกหน้าใช้สถิติโดยใช้ DMVs และ / หรือ DBCC หรือไม่ ฉันเป็นเจ้าของทั้ง SQL Server 2008 Internals และ SQL Server Internals และการแก้ไขปัญหาหนังสือและไม่มีใครพูดถึงโครงสร้างทางกายภาพของสถิติ หากพวกเขาฉันไม่สามารถค้นหาข้อมูลนี้

3
พฤติกรรมแปลก ๆ พร้อมขนาดตัวอย่างสำหรับการอัพเดทสถิติ
ฉันได้รับการตรวจสอบเกณฑ์การสุ่มตัวอย่างด้วยการปรับปรุงสถิติใน SQL Server (2012) และสังเกตเห็นพฤติกรรมที่น่าสงสัย โดยทั่วไปจำนวนแถวตัวอย่างที่ดูเหมือนจะแตกต่างกันภายใต้สถานการณ์บางอย่าง - แม้จะมีชุดข้อมูลเดียวกัน ฉันเรียกใช้แบบสอบถามนี้: --Drop table if exists IF (OBJECT_ID('dbo.Test')) IS NOT NULL DROP TABLE dbo.Test; --Create Table for Testing CREATE TABLE dbo.Test(Id INT IDENTITY(1,1) CONSTRAINT PK_Test PRIMARY KEY CLUSTERED, TextValue VARCHAR(20) NULL); --Insert enough data so we have more than 8Mb (the threshold at …

2
Cardinality Estimate สำหรับผู้ประกอบการ LIKE (ตัวแปรท้องถิ่น)
ฉันรู้สึกว่าเมื่อใช้ตัวLIKEดำเนินการในการปรับให้เหมาะสมสำหรับสถานการณ์ที่ไม่รู้จักทั้งมรดกและ CE ใหม่ใช้ประมาณการ 9% (สมมติว่ามีสถิติที่เกี่ยวข้องพร้อมใช้งานและเครื่องมือเพิ่มประสิทธิภาพการสืบค้นไม่จำเป็นต้องคาดเดาการเลือก) เมื่อดำเนินการค้นหาด้านล่างกับฐานข้อมูลเครดิตฉันได้รับการประมาณการที่แตกต่างกันภายใต้ CE ที่แตกต่างกัน ภายใต้ CE ใหม่ฉันได้รับการประมาณ 900 แถวซึ่งฉันคาดหวังภายใต้ CE ดั้งเดิมฉันได้รับการประมาณ 241.416 และฉันไม่สามารถทราบได้ว่าการประเมินนี้มาจากอะไร มีใครสามารถที่จะหลั่งน้ำตาแสงใด ๆ ? -- New CE (Estimate = 900) DECLARE @LastName VARCHAR(15) = 'BA%' SELECT * FROM [Credit].[dbo].[member] WHERE [lastname] LIKE @LastName; -- Forcing Legacy CE (Estimate = 241.416) DECLARE @LastName VARCHAR(15) = …

3
คำเตือนสำหรับสถิติที่ขาดหายไปในแผนการดำเนินการ
ฉันมีสถานการณ์ที่ฉันไม่เข้าใจ แผนการดำเนินการของ SQL Server ของฉันบอกฉันว่าฉันไม่มีสถิติในตาราง แต่สถิติถูกสร้างขึ้นแล้ว: แต่ถ้าเราดูที่โต๊ะเราจะเห็นว่ามีสถิติที่สร้างขึ้นโดยอัตโนมัติ: บางคนสามารถช่วยให้เข้าใจว่าเป็นอย่างไร Auto_Update และ Auto_Create เปิดสถิติในฐานข้อมูลปัจจุบัน ฉันใช้ SQL Server 2014

1
สถิติหายไปหลังจากการอัพเดตที่เพิ่มขึ้น
เรามีฐานข้อมูล SQL Server ขนาดใหญ่ที่แบ่งพาร์ติชันโดยใช้สถิติที่เพิ่มขึ้น ดัชนีทั้งหมดได้รับการแบ่งพาร์ติชันแล้ว เมื่อเราพยายามที่จะสร้างพาร์ติชันออนไลน์ใหม่โดยการแบ่งพาร์ติชันสถิติทั้งหมดจะหายไปหลังจากสร้างดัชนีใหม่ ด้านล่างเป็นสคริปต์เพื่อทำซ้ำปัญหาใน SQL Server 2014 ด้วยฐานข้อมูล AdventureWorks2014 --Example against AdventureWorks2014 Database CREATE PARTITION FUNCTION TransactionRangePF1 (DATETIME) AS RANGE RIGHT FOR VALUES ( '20130501', '20130601', '20130701', '20130801', '20130901', '20131001', '20131101', '20131201', '20140101', '20140201', '20140301' ); GO CREATE PARTITION SCHEME TransactionsPS1 AS PARTITION TransactionRangePF1 TO ( [PRIMARY], …

3
มีเหตุผลในการอัปเดตสถิติด้วยตนเองหรือไม่
ใน SQL Server สถิติจะถูกอัพเดตโดยอัตโนมัติเมื่อAuto Update Statisticsอยู่ในTrue(ซึ่งเป็นค่าเริ่มต้น) มีเหตุผลในการอัปเดตสถิติด้วยตนเองและในสถานการณ์ใดบ้าง


1
จะป้องกันการสร้างสถิติในคอลัมน์ได้อย่างไร?
ฉันมีตารางที่มีคอลัมน์ที่ฉันไม่ต้องการให้สร้างหรืออัปเดตสถิติ ฉันจะได้ค่าประมาณการเข้าร่วมที่ดีขึ้นถ้าฉันบังคับให้เครื่องมือเพิ่มประสิทธิภาพการสืบค้นใช้ความหนาแน่นของสถิติในคีย์หลักซึ่งต่างจากสถิติฮิสโตแกรมในคอลัมน์นั้น สถิติการอัปเดตอัตโนมัติและสร้างอัตโนมัติอยู่ที่ระดับฐานข้อมูลและฉันไม่สามารถเปลี่ยนแปลงได้ หากคุณต้องการแนะนำทางเลือกอื่น ๆ ในการป้องกันการสร้างสถิติโปรดจำไว้ว่าตารางนั้นถูกใช้ในมุมมองที่อ้างอิงโดยการสืบค้นหลายพันรายการ ฉันไม่สามารถควบคุมคิวรีที่เรียกใช้ กลยุทธ์เริ่มต้นของฉันคือการสร้างสถิติในคอลัมน์ด้วยNOCOMPUTEและSAMPLE 0 ROWSตัวเลือก ฉันรู้สึกว่า SQL Server จะไม่สร้างสถิติในคอลัมน์ที่มีวัตถุสถิติโดยอัตโนมัติ แต่สิ่งนี้เกิดขึ้นบนเซิร์ฟเวอร์ dev และ QA ของเรา COL_GROUPสถิติใหม่ที่สร้างขึ้นสำหรับ NORECOMPUTEสถิติของฉันไม่ได้รับการปรับปรุง ฉันไม่รู้ว่าทำไมสถิติจึงถูกสร้างขึ้นและฉันไม่สามารถเรียกใช้ตัวเองด้วยการเรียกใช้คิวรีได้ มีวิธีป้องกัน SQL Server จากการสร้างสถิติโดยอัตโนมัติในหนึ่งคอลัมน์หรือไม่? ตารางของฉันมีสองคอลัมน์เท่านั้นดังนั้นโซลูชันที่ป้องกันไม่ให้สร้างสถิติอัตโนมัติในตารางเดียวจะช่วยแก้ปัญหาของฉันได้เช่นกัน แฟล็กการติดตาม 4139 และ 2371 เปิดอยู่ในกรณีที่สร้างความแตกต่าง หากคุณต้องการเล่นกับโครงสร้างตารางฉันได้รวมไว้และข้อมูลตัวอย่างด้านล่าง: CREATE TABLE X_NO_COLUMN_STATS( [COL_USER] [varchar](256) NOT NULL, [COL_GROUP] [int] NOT NULL, CONSTRAINT [PK_X_NO_COLUMN_STATS] PRIMARY KEY CLUSTERED ( …

2
สถิติฐานข้อมูลคืออะไรและฉันจะได้ประโยชน์จากพวกเขาอย่างไร
ฉันเคยได้ยินการพูดถึงสถิติที่ SQL Server เก็บตามค่าเริ่มต้น พวกเขากำลังติดตามอะไรและฉันจะใช้ข้อมูลนี้เพื่อปรับปรุงฐานข้อมูลของฉันได้อย่างไร

1
SQL Server 2016 Bad Query Plan ล็อคฐานข้อมูลสัปดาห์ละครั้ง
สัปดาห์ละครั้งในช่วง 5 สัปดาห์ที่ผ่านมาในช่วงเวลาเดียวกันของวัน (เช้าตรู่อาจขึ้นอยู่กับกิจกรรมของผู้ใช้เมื่อผู้คนเริ่มใช้งาน), SQL Server 2016 (AWS RDS, มิร์เรอร์) เริ่มจับเวลาจำนวนมาก คำสั่ง ปรับปรุงสถิติในตารางทั้งหมดแก้ไขได้ทันที หลังจากครั้งแรกฉันทำให้มันอัปเดตสถิติทั้งหมดในทุกตารางทุกคืน (แทนที่จะเป็นรายสัปดาห์) แต่มันยังคงเกิดขึ้น (ประมาณ 8 ชั่วโมงหลังจากสถิติการอัปเดตทำงาน แต่ไม่ใช่ทุกวันที่มันทำงาน) ครั้งล่าสุดที่ฉันเปิดใช้งาน Query Store เพื่อดูว่าฉันสามารถค้นหาแผนแบบสอบถาม / แบบสอบถามที่เฉพาะเจาะจงได้หรือไม่ ฉันคิดว่าฉันสามารถ จำกัด ให้แคบลงหนึ่ง: หลังจากค้นหาข้อความค้นหานั้นฉันได้เพิ่มดัชนีที่แนะนำซึ่งขาดหายไปจากแบบสอบถามที่ไม่ได้ใช้บ่อยครั้งนี้ แผนแบบสอบถามที่ไม่ถูกต้องกำลังทำการสแกนดัชนี (บนตารางที่มีแถว 10k เท่านั้น) แผนคิวรีอื่น ๆ ที่ส่งคืนหน่วยเป็นมิลลิวินาทีใช้ในการสแกนแบบเดียวกัน แผนแบบสอบถามใหม่ล่าสุดหลังจากสร้างดัชนีใหม่จะค้นหาเท่านั้น แต่ถึงแม้จะไม่มีดัชนีนั้นก็ 99% ของเวลา แต่มันกลับมาภายในเวลาไม่กี่มิลลิวินาที แต่จากนั้นทุกสัปดาห์จะใช้เวลา> 40 วินาที แย่มากที่หมดเวลา: http://brentozar.com/pastetheplan/?id=rymaWt56e แผนก่อนหน้าซึ่งไม่หมดเวลา: http://brentozar.com/pastetheplan/?id=HyN7ftcpe แผนใหม่ล่าสุดพร้อมดัชนีใหม่: …

1
SQL Server รู้ว่าภาคแสดงมีความสัมพันธ์กันอย่างไร
ในขณะที่การวิเคราะห์แบบสอบถาม SQL Server 2008 R2 ด้วยการประมาณค่า cardinality ที่ไม่ดี (แม้จะมีการทำดัชนีอย่างง่ายสถิติที่ทันสมัย ​​ฯลฯ ) และด้วยเหตุนี้แผนการสืบค้นที่ไม่ดีฉันพบบทความ KB ที่เกี่ยวข้องบางที: การ แก้ไข: ประสิทธิภาพแย่เมื่อคุณเรียกใช้แบบสอบถาม ที่ประกอบด้วยสหสัมพันธ์และเพรดิเคตใน SQL Server 2008 หรือใน SQL Server 2008 R2 หรือใน SQL Server 2012 ฉันสามารถเดาได้ว่าบทความ KB หมายถึงอะไรโดย "มีความสัมพันธ์" เช่นภาคแสดงข้อ 2 และภาคส่วน # 1 ส่วนใหญ่กำหนดเป้าหมายไปที่แถวเดียวกัน แต่ฉันไม่รู้ว่า SQL Server รู้เกี่ยวกับสหสัมพันธ์เหล่านี้อย่างไร ตารางต้องการดัชนีหลายคอลัมน์ที่มีคอลัมน์จากเพรดิเคตทั้งสองหรือไม่ SQL ใช้สถิติเพื่อตรวจสอบว่าค่าจากคอลัมน์หนึ่งมีความสัมพันธ์กับอีกคอลัมน์หนึ่งหรือไม่? หรือมีวิธีอื่นที่ใช้? ฉันขอสิ่งนี้ด้วยสองเหตุผล: เพื่อกำหนดว่าตารางและแบบสอบถามใดของฉันอาจได้รับการปรับปรุงโดยใช้โปรแกรมแก้ไขด่วนนี้ …

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