คำถามติดแท็ก sql-server-2016

SQL Server 2016 (รุ่นบิลด์หลัก 13.00.xxxx) โปรดติดแท็ก sql-server ด้วย

3
เหตุใดจึงใช้เวลาสูงสุด 30 วินาทีในการสร้างกลุ่มแถว CCI แบบง่าย
ฉันกำลังทำงานเกี่ยวกับการสาธิต CCIs เมื่อฉันสังเกตเห็นว่าเม็ดมีดบางรุ่นของฉันใช้เวลานานกว่าที่คาดหมาย คำจำกัดความของตารางที่จะทำซ้ำ: DROP TABLE IF EXISTS dbo.STG_1048576; CREATE TABLE dbo.STG_1048576 (ID BIGINT NOT NULL); INSERT INTO dbo.STG_1048576 SELECT TOP (1048576) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN FROM master..spt_values t1 CROSS JOIN master..spt_values t2; DROP TABLE IF EXISTS dbo.CCI_BIGINT; CREATE TABLE dbo.CCI_BIGINT (ID BIGINT NOT NULL, INDEX CCI …

2
วิธีการปิดใช้งาน“ เวลาที่เสร็จสมบูรณ์: …” ในหน้าต่างข้อความเซิร์ฟเวอร์ SQL
ทุกคำถามที่ฉันเรียกใช้ใน SSMS ต่อท้ายข้อความที่น่ารำคาญ: "เวลาที่เสร็จสมบูรณ์: ... " ฉันจะปิดการใช้งานข้อความนั้นได้อย่างไร?

1
เหตุใดตารางที่ได้รับนี้จึงปรับปรุงประสิทธิภาพ
ฉันมีแบบสอบถามซึ่งใช้สตริง json เป็นพารามิเตอร์ json เป็นอาร์เรย์ของคู่ละติจูดและลองจิจูด ตัวอย่างอินพุตอาจเป็นดังต่อไปนี้ declare @json nvarchar(max)= N'[[40.7592024,-73.9771259],[40.7126492,-74.0120867] ,[41.8662374,-87.6908788],[37.784873,-122.4056546]]'; มันเรียก TVF ที่คำนวณจำนวนจุดที่น่าสนใจรอบ ๆ จุดทางภูมิศาสตร์ที่ระยะ 1,3,5,10 ไมล์ create or alter function [dbo].[fn_poi_in_dist](@geo geography) returns table with schemabinding as return select count_1 = sum(iif(LatLong.STDistance(@geo) <= 1609.344e * 1,1,0e)) ,count_3 = sum(iif(LatLong.STDistance(@geo) <= 1609.344e * 3,1,0e)) ,count_5 = sum(iif(LatLong.STDistance(@geo) <= 1609.344e …

2
ทำไมถึงเป็น TIME ZONE nondeterministic
AT TIME ZONEดูเหมือนว่าSQL Server 2016 จะเป็น nondeterministic อย่างไรก็ตามฉันไม่สามารถค้นหาเอกสารอย่างเป็นทางการที่ระบุสิ่งนี้หรือให้เหตุผลเกี่ยวกับเหตุผลที่อยู่เบื้องหลัง ทำไมต้องเป็นAT TIME ZONEnondeterministic ตัวอย่างที่แสดงให้เห็นถึงความไม่มุ่งมั่น การดำเนินการ: CREATE TABLE Test ( LegacyTimestamp DATETIME, Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED ); ส่งคืนข้อผิดพลาดต่อไปนี้: Msg 4936, Level 16, State 1, Line 1 Computed column 'Timestamp' in table 'Test' cannot be persisted because the …

1
ที่เก็บข้อมูลดัชนีแบบไม่คลัสเตอร์บนเสาหลักแบบคลัสเตอร์
ใน SQL Server ดัชนี nonclustered ที่ไม่ซ้ำกันในตารางrowstoreประกอบด้วยที่คั่นหน้าของวัตถุฐาน(RID หรือคีย์การทำคลัสเตอร์) ที่ทุกระดับของโครงสร้างดัชนีที่ไม่เป็นคลัสเตอร์ บุ๊กมาร์กจะถูกจัดเก็บเป็นส่วนหนึ่งของคีย์ดัชนีที่ไม่เป็นคลัสเตอร์ในทุกระดับดัชนี ในทางตรงกันข้ามถ้าดัชนี nonclustered เป็นที่ไม่ซ้ำกันที่คั่นเป็นปัจจุบันเท่านั้นที่ใบระดับของดัชนี - ไม่ได้เป็นส่วนหนึ่งของคีย์ (บุ๊กเป็นปัจจุบันเป็นหนึ่งหรือคอลัมน์รวมมากขึ้นในผล) ใน SQL Server 2016 เป็นไปได้ที่จะสร้างดัชนี b-tree แบบ nonclustered บนตารางเชิงคอลัมน์ (อันที่มีดัชนี columnstore แบบคลัสเตอร์) อะไรคือ 'บุ๊คมาร์ค' ที่ใช้สำหรับดัชนี b-tree แบบไม่คลัสเตอร์บนตาราง columnstore แบบคลัสเตอร์ ความแตกต่างระหว่างดัชนีที่ไม่ซ้ำแบบไม่เจาะจงและไม่ซ้ำแบบคลัสเตอร์ที่อธิบายไว้ข้างต้นยังคงมีผลอยู่หรือไม่?

2
พื้นที่ดิสก์เต็มในระหว่างการแทรกเกิดอะไรขึ้น
วันนี้ฉันค้นพบฮาร์ดไดรฟ์ที่เก็บฐานข้อมูลของฉันเต็ม สิ่งนี้เคยเกิดขึ้นมาก่อนโดยปกติสาเหตุจะชัดเจนมาก มักจะมีแบบสอบถามที่ไม่ดีซึ่งทำให้เกิดการรั่วไหลขนาดใหญ่เพื่อ tempdb ซึ่งเติบโตขึ้นจนดิสก์เต็ม คราวนี้มันเห็นได้ชัดน้อยลงว่าเกิดอะไรขึ้นเนื่องจาก tempdb ไม่ได้เป็นสาเหตุของไดรฟ์เต็มรูปแบบมันเป็นฐานข้อมูลของตัวเอง ข้อเท็จจริง: ขนาดฐานข้อมูลปกติประมาณ 55 GB เพิ่มขึ้นเป็น 605 GB ไฟล์บันทึกมีขนาดปกติและมีขนาดใหญ่มาก Datafile มีพื้นที่ว่าง 85% (ฉันตีความว่าเป็น 'อากาศ': พื้นที่ที่ใช้ แต่ได้รับการปล่อยให้ว่างแล้ว SQL Server จะสำรองพื้นที่ทั้งหมดเมื่อจัดสรรแล้ว) ขนาด Tempdb เป็นปกติ ฉันได้พบสาเหตุที่น่าจะเป็น; มีหนึ่งแบบสอบถามที่เลือกแถวมากเกินไป (การรวมที่ไม่ดีทำให้เกิดการเลือก 11 พันล้านแถวซึ่งคาดว่าสองแสนคน) นี่คือSELECT INTOแบบสอบถามซึ่งทำให้ฉันสงสัยว่าสถานการณ์ต่อไปนี้อาจเกิดขึ้น: SELECT INTO ถูกใช้งาน สร้างตารางเป้าหมายแล้ว ข้อมูลถูกแทรกขณะที่ถูกเลือก ดิสก์เต็มทำให้การแทรกล้มเหลว SELECT INTO ถูกยกเลิกและย้อนกลับ การย้อนกลับเพิ่มพื้นที่ว่าง (ข้อมูลที่แทรกไว้แล้วจะถูกลบ) แต่ SQL Server …

4
จดหมาย DB SQL Server 2016 ไม่ได้ส่ง
ฉันใช้ SQL Server 2016 และมีการระเบิด ... จดหมาย DB ของฉันไม่ได้ส่งและฉันกำลังจะหมด ฉันตรวจสอบสิทธิ์บัญชี SQL สองครั้งเพื่อให้สามารถเรียกทำงานได้ DBmail - มันได้อ่านและดำเนินการแล้ว ฉันป้อนกฎสำหรับพอร์ตขาออกของไฟร์วอลล์ 587 ฉันลองใช้บัญชีอีเมลและโปรไฟล์อื่นด้วยปัญหาที่ยังไม่ได้ส่ง รายการเฉพาะในบันทึก (บันทึกเมล db) กำลังเริ่มต้นและสิ้นสุดการให้บริการ ไม่มีข้อผิดพลาดทุกที่ที่ฉันสามารถหาได้ อีเมลดูเหมือนจะป้อนคิวการส่งและจะไม่ทิ้ง บัญชีสามารถส่งและรับอีเมลด้วยตนเองและจากอินสแตนซ์ของ SQL Server 2014 บนเครื่องอื่น ฉันได้รับรายการที่มีสถานะ "ไม่ส่ง" และตรวจสอบสถานที่ปกติทั้งหมดพร้อมผลลัพธ์ที่คาดหวังในรายการทั้งหมดนอกเหนือจากจดหมายที่ไม่ได้ส่งคิวที่ยาว: SELECT * FROM msdb..sysmail_event_log order by log_id DESC SELECT * FROM dbo.sysmail_mailitems SELECT * FROM dbo.sysmail_sentitems USE msdb …

1
กลยุทธ์การสืบค้นโดยใช้ตารางเวลาชั่วคราวของระบบ SQL Server 2016 สำหรับมิติที่เปลี่ยนแปลงช้า
เมื่อใช้ตารางชั่วคราวของระบบ (ใหม่ใน SQL Server 2016) การเขียนแบบสอบถามและความหมายของประสิทธิภาพเมื่อใช้คุณลักษณะนี้เพื่อจัดการมิติการเปลี่ยนแปลงอย่างช้า ๆ ในคลังข้อมูลเชิงสัมพันธ์ขนาดใหญ่ ตัวอย่างเช่นสมมติว่าฉันมีCustomerมิติ100,000 แถวพร้อมPostal Codeคอลัมน์และSalesตารางข้อเท็จจริงหลายพันล้านแถวพร้อมCustomerIDคอลัมน์คีย์ต่างประเทศ และสมมติว่าฉันต้องการสอบถาม "ยอดขายรวม 2014 ตามรหัสไปรษณีย์ของลูกค้า" DDL แบบง่ายเป็นเช่นนี้ (มีหลายคอลัมน์เพื่อความชัดเจน): CREATE TABLE Customer ( CustomerID int identity (1,1) NOT NULL PRIMARY KEY CLUSTERED, PostalCode varchar(50) NOT NULL, SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL, SysEndTime datetime2 GENERATED ALWAYS AS ROW …

1
เหตุใด CHECKDB จึงอ่านไฟล์บันทึกธุรกรรมบนฐานข้อมูลที่มีตารางปรับแต่งหน่วยความจำ
tl; dr : เหตุใด CHECKDB จึงอ่านบันทึกธุรกรรมสำหรับฐานข้อมูลผู้ใช้ที่มีตารางเพิ่มประสิทธิภาพหน่วยความจำ ปรากฏว่า CHECKDB กำลังอ่านไฟล์บันทึกธุรกรรมของฐานข้อมูลผู้ใช้เมื่อตรวจสอบฐานข้อมูลของฉันโดยเฉพาะฐานข้อมูลที่ใช้ตาราง OLTP ในหน่วยความจำ CHECKDB สำหรับฐานข้อมูลนี้ยังคงเสร็จสิ้นในระยะเวลาที่เหมาะสมดังนั้นฉันจึงอยากรู้เกี่ยวกับพฤติกรรม แต่มันเป็นระยะเวลายาวนานที่สุดสำหรับ CHECKDB ของฐานข้อมูลทั้งหมดในอินสแตนซ์นี้ ในการตรวจสอบCHECKDB จากทุกมุมมองของมหากาพย์ Paul Paulal : คำอธิบายที่สมบูรณ์ของขั้นตอน CHECKDB ทั้งหมดฉันเห็นว่า CHECKDB pre-SQL 2005 CHECKDB ใช้ในการอ่านบันทึกเพื่อให้ได้มุมมองที่สอดคล้องกันของฐานข้อมูล แต่เนื่องจากนี่เป็น 2016 จึงใช้สแน็ปช็อตฐานข้อมูลภายใน อย่างไรก็ตามหนึ่งในข้อกำหนดเบื้องต้นสำหรับสแน็ปช็อตคือ: ฐานข้อมูลต้นทางต้องไม่มีกลุ่มไฟล์ MEMORY_OPTIMIZED_DATA ฐานข้อมูลผู้ใช้ของฉันมีหนึ่งในกลุ่มไฟล์เหล่านี้ดังนั้นจึงดูเหมือนว่าสแน็ปช็อตอยู่นอกตาราง ตามเอกสาร CHECKDB : หากไม่สามารถสร้างสแน็ปช็อตหรือระบุ TABLOCK ได้ DBCC CHECKDB จะได้รับการล็อกเพื่อให้ได้ความสอดคล้องที่จำเป็น ในกรณีนี้จำเป็นต้องใช้การล็อกฐานข้อมูลแบบเอกสิทธิ์เฉพาะบุคคลเพื่อทำการตรวจสอบการจัดสรรและจำเป็นต้องใช้การล็อกตารางแบบแบ่งใช้เพื่อทำการตรวจสอบตาราง โอเคเรากำลังทำการล็อกฐานข้อมูลและล็อคตารางแทนสแนปชอต แต่นั่นก็ไม่ได้อธิบายว่าทำไมมันต้องอ่านบันทึกการทำธุรกรรม แล้วอะไรล่ะ ฉันได้จัดทำสคริปต์ด้านล่างเพื่อจำลองสถานการณ์ …

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 แผนใหม่ล่าสุดพร้อมดัชนีใหม่: …

2
ห่วงโซ่ใบรับรองที่ออกโดยหน่วยงานที่ไม่น่าเชื่อถือ
เมื่อไม่นานมานี้ฉันติดตั้ง SQL Server 2016 Developer Edition ในสภาพแวดล้อมของ Windows 10 Home Edition ( แล็ปท็อปต้องแม่นยำ ) และทุกอย่างเรียบร้อยดี แล้วใครบางคน - ผู้ดูแลระบบในกล่อง - ตัดสินใจโดยไม่บอกฉันเพื่อเปลี่ยนชื่อกล่องดังกล่าว หลังจากนั้นเมื่อพยายามเชื่อมต่อกับเซิร์ฟเวอร์ SQL เราพบข้อความแสดงข้อผิดพลาดต่อไปนี้: นี่เป็นคำถามที่คล้ายกันมากสำหรับคำถามนี้: “ ห่วงโซ่ใบรับรองออกโดยหน่วยงานที่ไม่น่าเชื่อถือ” เมื่อเชื่อมต่อฐานข้อมูลในบทบาทของ VM จากเว็บไซต์ Azure ฉันเคยมาที่นี่ด้วย: ชื่อหลักเป้าหมายไม่ถูกต้อง ไม่สามารถสร้างบริบท SSPI (Microsoft SQL Server ข้อผิดพลาด: 0) และฉันใช้ Kerberos Configuration Manager ซึ่งทำให้ฉันมีข้อผิดพลาดที่แตกต่างกัน ฉันควรจะบอกว่าฉันสามารถเชื่อมต่อกับอินสแตนซ์นี้ของเซิร์ฟเวอร์ SQL โดยการรับรองความถูกต้องของเซิร์ฟเวอร์ SQLแต่ฉันต้องการเชื่อมต่อโดยใช้การพิสูจน์ตัวจริงของ windows เพียงเพื่อให้ชัดเจน …

1
SQL Server - ถ้าลอจิกในขั้นตอนการจัดเก็บและแคชแผน
มาตรฐาน SQL Server 2012 และ 2016: ถ้าฉันใส่if-elseลอจิกในโพรซีเดอร์ที่เก็บไว้เพื่อรันโค้ดหนึ่งในสองสาขาขึ้นอยู่กับค่าของพารามิเตอร์เอ็นจินแคชจะเป็นเวอร์ชันล่าสุดหรือไม่? และถ้าในการประมวลผลต่อไปนี้ค่าของพารามิเตอร์จะเปลี่ยนแปลงมันจะทำการคอมไพล์และแคชกระบวนการที่เก็บไว้ใหม่อีกครั้งเนื่องจากจะต้องทำการประมวลผลรหัสสาขาอื่นหรือไม่ (แบบสอบถามนี้ค่อนข้างแพงในการรวบรวม)

1
datetime2 (0) vs datetime2 (2)
ตามเอกสารdatetime2 (Transact-SQL) : ขนาดหน่วยเก็บข้อมูล 6 ไบต์สำหรับ precisions น้อยกว่า 3 7 ไบต์สำหรับ precensions 3 และ 4 ข้อกำหนด อื่น ๆ ทั้งหมดต้องการ 8 ไบต์ ขนาดของdatetime2(0), datetime2(1), datetime2(2)ใช้เงินเดียวกันของการจัดเก็บ (6 bytes) ฉันจะถูกต้องหรือไม่ในการบอกว่าฉันอาจไปด้วยdatetime2(2)และได้รับประโยชน์จากความแม่นยำโดยไม่มีค่าใช้จ่ายเพิ่มเติม โปรดทราบ: คอลัมน์นี้ถูกทำดัชนีด้วย PK เพื่อจัดทำดัชนีแบบคลัสเตอร์ผสม (ใช้สำหรับการแบ่งตาราง) ฉันไม่สนใจเกี่ยวกับมิลลิวินาที จะdatetime2(0)เป็นซีพียูที่มีประสิทธิภาพเมื่อใช้ในประโยคหรือเมื่อแสวงหาผ่านดัชนี? นี่เป็นตารางขนาดใหญ่ดังนั้นการเพิ่มประสิทธิภาพขนาดเล็กที่สุดจะสร้างความแตกต่างอย่างมาก

1
เรียงลำดับการรั่วไหลไปยัง tempdb แต่แถวโดยประมาณจะเท่ากับแถวจริง
บน SQL Server 2016 SP2 ที่มีหน่วยความจำสูงสุดตั้งไว้ที่ 25GB เรามีแบบสอบถามที่ดำเนินการประมาณ 80 ครั้งในหนึ่งนาที แบบสอบถามรั่วไหลประมาณ 4,000 หน้าไปยัง tempdb ซึ่งทำให้ IO จำนวนมากบนดิสก์ของ tempdb เมื่อคุณดูที่แผนแบบสอบถาม (แบบสอบถามแบบง่าย) คุณจะเห็นว่าจำนวนแถวโดยประมาณเท่ากับจำนวนแถวจริง แต่ยังคงเกิดการรั่วไหล ดังนั้นสถิติที่ล้าสมัยไม่สามารถเป็นสาเหตุของปัญหาได้ ฉันทำการทดสอบและแบบสอบถามต่อไปนี้รั่วไหลไปยัง Tempdb: select id --uniqueidentifier from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) แต่ถ้าฉันเลือกคอลัมน์อื่นจะไม่มีการรั่วไหลเกิดขึ้น: select startdate --datetime from SortProblem where [status] ='A' order …

1
เพื่อนร่วมงานของฉันได้รับสคีมาของตัวเองได้อย่างไร
ฉันมีขั้นตอนการจัดเก็บที่: ตรวจสอบว่ามีตารางอยู่หรือไม่และหากเป็นเช่นนั้นให้ลดลง สร้างตารางนั้นอีกครั้ง จากนั้นเติมตารางนั้นด้วยข้อความค้นหาประมาณ 30 รายการ เมื่อฉัน (เจ้าของฐานข้อมูล) เรียกใช้ proc นี้ทุกอย่างทำงานตามที่ตั้งใจไว้ เมื่อเพื่อนร่วมงานของฉันทำเช่นนั้นใครมีสิทธิ์ DROP / CREATE ในฐานข้อมูลนี้ผ่านบทบาทใน Active Directory หลายสิ่งผิดปกติ นี่คือสิ่งที่รบกวนจิตใจของฉัน: การสร้างตารางไม่ได้ระบุdboสคีมาไว้อย่างชัดเจนก่อนชื่อ สิ่งนี้ส่งผลให้ตารางที่เรียกว่าdomain\cowork_id.table_name_heretable ถูกสร้างขึ้น นอกเหนือจากตารางที่ถูกสร้างในสคีมาส่วนตัวตอนนี้เขายังมีสคีมานั้นในฐานข้อมูล (มันไม่ได้มีอยู่ก่อนการรัน proc) เกิดอะไรขึ้น? เหตุใด SQL Server จึงสร้างตารางในสคีมาของผู้ใช้แทนที่จะเป็นdboเมื่อไม่ได้ระบุไว้

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