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

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

2
ใน SQL Server 2016 ความแตกต่างระหว่าง Always Encrypted และ Transparent Data Encryption แตกต่างกันอย่างไร
ขณะที่ฉันเขียนสิ่งนี้ฉันยังคงรอการเปิดตัวอย่างเป็นทางการของ SQL Server 2016 เพื่อให้เราสามารถสำรวจประโยชน์ของคุณสมบัติ "เข้ารหัสเสมอ" ฉันแค่อยากจะรู้ว่าความแตกต่างที่เฉพาะเจาะจงจะอยู่ระหว่างการเข้ารหัสเสมอและการเข้ารหัสข้อมูลแบบโปร่งใสที่มีอยู่ในปัจจุบันใน SQL Server 2016 เพื่อให้เราสามารถตัดสินใจได้อย่างถูกต้องสำหรับโครงการในอนาคต

3
ปริมาณการใช้“ หน่วยความจำเซิร์ฟเวอร์โดยรวม” ของ SQL Server หยุดนิ่งเป็นเดือนโดยมี 64GB + มากกว่านั้น
ฉันพบปัญหาแปลกที่ SQL Server 2016 Standard Edition 64- บิตดูเหมือนว่าได้ปิดตัวเองที่ครึ่งหนึ่งของหน่วยความจำทั้งหมดที่จัดสรรให้อย่างแม่นยำ (64GB 128GB) ผลลัพธ์ของ@@VERSIONคือ: Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64) 22 ธันวาคม 2017 11:25:00 ลิขสิทธิ์ (c) Microsoft Corporation Standard Edition (64 บิต) บน Windows Server 2012 R2 Datacenter 6.3 ( รุ่น 9600:) (Hypervisor) ผลลัพธ์ของsys.dm_os_process_memoryคือ: เมื่อฉันแบบสอบถามsys.dm_os_performance_countersผมเห็นว่าTarget Server Memory (KB)ที่131072000และเป็นเพียงภายใต้ครึ่งหนึ่งของที่ที่Total Server Memory …

3
เหตุใดแบบสอบถามแบบ SELECT จะทำให้เกิดการเขียน
ฉันสังเกตว่าบนเซิร์ฟเวอร์ที่ใช้ SQL Server 2016 SP1 CU6 บางครั้งเซสชันเพิ่มเติมของกิจกรรมจะแสดงคิวรี SELECT ซึ่งทำให้เกิดการเขียน ตัวอย่างเช่น: แผนการดำเนินการไม่แสดงสาเหตุที่ชัดเจนสำหรับการเขียนเช่นตารางแฮชสปูลหรือการเรียงลำดับที่สามารถรั่วไหลไปที่ TempDB: การกำหนดตัวแปรให้กับประเภท MAX หรือการอัปเดตสถิติอัตโนมัติอาจทำให้เกิดสิ่งนี้ได้เช่นกัน แต่ก็ไม่ได้เป็นสาเหตุของการเขียนในกรณีนี้ การเขียนอาจมาจากอะไรอีก?

1
อะไรคือวัตถุประสงค์เชิงเหตุผลที่ต้องการ SQL Server 2016 มากกว่าเวอร์ชั่นก่อนหน้า?
เนื่องจาก Microsoft ทำให้รุ่น SQL Server อัปเกรดบ่อยขึ้นตั้งแต่ SQL Server 2005 หรือ 2008 วันหลาย บริษัท พบว่าเป็นการยากที่จะตัดสินว่าการอัปเกรดเป็น "ต้องมี!" และเมื่อการอัปเกรดเป็น "ดีที่มี" ในคำถามก่อนหน้านี้สองสามคำถามที่ถามถึงเหตุผลที่ต้องการรุ่นใหม่กว่าของ SQL Server มากกว่ารุ่นก่อนหน้าอะไรคือเหตุผลทางเทคนิคหรือเหตุผลทางธุรกิจที่ บริษัท อาจพิจารณาเพื่ออัปเกรดเป็น SQL Server 2016 มากกว่ารุ่นก่อนหน้า เปิดตัวเช่น SQL Server 2014 ( คำถามนี้เกี่ยวกับ SQL Server 2012 เมื่อเทียบกับ SQL Server 2008 หรือนี่เกี่ยวกับ SQL Server 2012 เทียบกับ SQL Server 2005 เป็นตัวอย่างของจิตวิญญาณของคำถามนี้คำตอบของพวกเขายังขยายไปด้วยเหตุผลบางประการที่นี่สำหรับ บริษัท …

4
วิธีที่ปรับขนาดได้เพื่อจำลอง HASHBYTES โดยใช้ฟังก์ชันสเกลาร์ SQL CLR คืออะไร?
เป็นส่วนหนึ่งของกระบวนการ ETL ของเราเราเปรียบเทียบแถวจากการจัดเตรียมกับฐานข้อมูลการรายงานเพื่อคำนวณว่าคอลัมน์ใดมีการเปลี่ยนแปลงจริงหรือไม่นับตั้งแต่ข้อมูลถูกโหลดครั้งล่าสุด การเปรียบเทียบจะขึ้นอยู่กับคีย์เฉพาะของตารางและการแฮชบางประเภทของคอลัมน์อื่นทั้งหมด ขณะนี้เราใช้HASHBYTESกับอัลกอริทึมและได้พบว่ามันไม่ได้ขนาดบนเซิร์ฟเวอร์ขนาดใหญ่ถ้าหลายเธรดพร้อมกันมีการโทรทั้งหมดSHA2_256HASHBYTES ปริมาณงานที่วัดเป็นแฮชต่อวินาทีจะไม่เพิ่มเธรดที่เกิดขึ้นพร้อมกัน 16 เธรดเมื่อทดสอบบนเซิร์ฟเวอร์คอร์ 96 ฉันทดสอบโดยเปลี่ยนจำนวนMAXDOP 8ข้อความค้นหาที่เกิดขึ้นพร้อมกันจาก 1 - 12 การทดสอบด้วยMAXDOP 1แสดงให้เห็นถึงคอขวดที่สามารถปรับขยายได้แบบเดียวกัน วิธีแก้ปัญหาฉันต้องการลองใช้โซลูชัน SQL CLR นี่คือความพยายามของฉันในการระบุข้อกำหนด: ฟังก์ชั่นจะต้องสามารถมีส่วนร่วมในแบบสอบถามแบบขนาน ฟังก์ชั่นจะต้องกำหนดขึ้น ฟังก์ชั่นจะต้องรับอินพุตNVARCHARหรือVARBINARYสตริง (คอลัมน์ที่เกี่ยวข้องทั้งหมดถูกต่อกันเข้าด้วยกัน) ขนาดอินพุตปกติของสตริงจะมีความยาว 100 - 20000 อักขระ 20000 ไม่ใช่ค่าสูงสุด โอกาสของการชนกันของแฮชควรจะเท่ากับหรือดีกว่าอัลกอริทึม MD5 CHECKSUMใช้งานไม่ได้สำหรับเราเพราะมีการชนกันมากเกินไป ฟังก์ชันต้องขยายขนาดได้ดีบนเซิร์ฟเวอร์ขนาดใหญ่ (ปริมาณงานต่อเธรดไม่ควรลดลงอย่างมีนัยสำคัญเมื่อจำนวนเธรดเพิ่มขึ้น) สำหรับ Application Reasons ™ให้ถือว่าฉันไม่สามารถบันทึกค่าแฮชของตารางการรายงานได้ เป็น CCI ที่ไม่สนับสนุนทริกเกอร์หรือคอลัมน์ที่คำนวณได้ (มีปัญหาอื่น ๆ เช่นกันที่ฉันไม่ต้องการเข้าร่วม) วิธีที่ปรับขนาดได้เพื่อจำลองHASHBYTESโดยใช้ฟังก์ชัน SQL CLR คืออะไร …

1
ตัวดำเนินการสปูลกระตือรือร้นมีประโยชน์สำหรับการลบนี้จากคอลัมน์ในคลัสเตอร์หรือไม่
ฉันกำลังทดสอบการลบข้อมูลจากดัชนี columnstore แบบคลัสเตอร์ ฉันสังเกตเห็นว่ามีตัวดำเนินการเก็บพักขนาดใหญ่ที่กระตือรือร้นในแผนการดำเนินการ: สิ่งนี้เสร็จสมบูรณ์ด้วยคุณสมบัติดังต่อไปนี้: ลบ 60 ล้านแถว 1.9 GiB TempDB ใช้แล้ว เวลาดำเนินการ 14 นาที แผนอนุกรม 1 rebind บนสปูล ค่าใช้จ่ายโดยประมาณสำหรับการสแกน: 364.821 หากฉันหลอกผู้ประมาณค่าให้ดูถูกดูแคลนฉันจะได้รับแผนการที่เร็วกว่าและหลีกเลี่ยงการใช้ TempDB: ค่าใช้จ่ายโดยประมาณของการสแกน: 56.901 (นี่เป็นแผนโดยประมาณ แต่ตัวเลขในความคิดเห็นถูกต้อง) ที่น่าสนใจที่เก็บพักหายไปอีกครั้งถ้าฉันล้างร้านค้าเดลต้าโดยเรียกใช้ต่อไปนี้: ALTER INDEX IX_Clustered ON Fact.RecordedMetricsDetail REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON); สปูลจะปรากฏขึ้นเฉพาะเมื่อมีจำนวนหน้ามากกว่าเกณฑ์ในร้านเดลต้า หากต้องการตรวจสอบขนาดของร้านค้าเดลต้าฉันกำลังเรียกใช้คิวรีต่อไปนี้เพื่อตรวจสอบหน้าในแถวสำหรับตาราง: SELECT SUM([in_row_used_page_count]) AS in_row_used_pages, SUM(in_row_data_page_count) AS in_row_data_pages FROM sys.[dm_db_partition_stats] as …

2
"ดัชนีการจับคู่บางส่วน" คืออะไร
ฉันกำลังพยายามเรียนรู้เพิ่มเติมเกี่ยวกับตัวดำเนินการแบบสอบถาม "การอ้างอิงต่างประเทศ" ที่แนะนำใน SQL Server 2016 มีข้อมูลไม่มากนัก Microsoft ประกาศมันนี่และฉัน blogged เกี่ยวกับเรื่องนี้ที่นี่ ผู้ประกอบการใหม่สามารถมองเห็นได้โดยการลบแถวจากตารางผู้ปกครองที่มี 254 หรือเข้ามาเพิ่มเติมอ้างอิงที่สำคัญต่างประเทศ: การเชื่อมโยง dbfiddle มีจำนวนการนับที่แตกต่างกันสามรายการที่แสดงในรายละเอียดผู้ประกอบการ การอ้างอิงคีย์ต่างประเทศนับเป็นจำนวนของคีย์ต่างประเทศที่เข้ามา ไม่มีการนับดัชนีที่ตรงกันคือจำนวนกุญแจต่างประเทศที่เข้ามาโดยไม่มีดัชนีที่เหมาะสม การตรวจสอบว่าตารางที่อัปเดตหรือถูกลบจะไม่ละเมิดข้อ จำกัด ดังกล่าวจะต้องสแกนตารางลูก ฉันไม่รู้ว่าการจับคู่ดัชนีบางส่วนหมายถึงอะไร ดัชนีการจับคู่บางส่วนในบริบทนี้คืออะไร ฉันไม่สามารถทำงานต่อไปนี้ได้: ดัชนีที่กรองแล้ว การวางคอลัมน์คีย์ต่างประเทศเป็นINCLUDEคอลัมน์สำหรับดัชนี สร้างดัชนีด้วยคอลัมน์ foreign key เป็นคอลัมน์ key ที่สอง ดัชนีคอลัมน์เดี่ยวสำหรับปุ่มต่างประเทศหลายคอลัมน์ การสร้างดัชนีครอบคลุมหลายรายการเพื่อเปิดใช้งานแผน "เข้าร่วมดัชนี" สำหรับคีย์ต่างประเทศหลายคอลัมน์ Dan Guzmanชี้ให้เห็นว่าคีย์ต่างประเทศหลายคอลัมน์สามารถจับคู่ดัชนีแม้ว่าคีย์ดัชนีจะอยู่ในลำดับที่แตกต่างจากคอลัมน์คีย์ต่างประเทศ รหัสของเขาอยู่ที่นี่ในกรณีที่มีคนสามารถใช้เป็นจุดเริ่มต้นเพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับดัชนีการจับคู่บางส่วน

6
ทำไมแบบสอบถาม SELECT DISTINCT TOP N ของฉันจึงสแกนทั้งตาราง
ฉันใช้SELECT DISTINCT TOP Nแบบสอบถามน้อยซึ่งดูเหมือนว่าจะเพิ่มประสิทธิภาพไม่ดีโดยเพิ่มประสิทธิภาพแบบสอบถาม SQL Server เริ่มจากการพิจารณาตัวอย่างเล็ก ๆ น้อย ๆ : ตารางหนึ่งล้านแถวที่มีสองค่าสลับกัน ฉันจะใช้ฟังก์ชันGetNumsเพื่อสร้างข้อมูล: DROP TABLE IF EXISTS X_2_DISTINCT_VALUES; CREATE TABLE X_2_DISTINCT_VALUES (PK INT IDENTITY (1, 1), VAL INT NOT NULL); INSERT INTO X_2_DISTINCT_VALUES WITH (TABLOCK) (VAL) SELECT N % 2 FROM dbo.GetNums(1000000); UPDATE STATISTICS X_2_DISTINCT_VALUES WITH FULLSCAN; สำหรับแบบสอบถามต่อไปนี้: SELECT DISTINCT …

2
เหตุใดแบบสอบถามย่อยจึงลดการประมาณแถวเป็น 1
พิจารณาแบบสอบถามที่ประดิษฐ์ แต่เรียบง่ายต่อไปนี้: SELECT ID , CASE WHEN ID <> 0 THEN (SELECT TOP 1 ID FROM X_OTHER_TABLE) ELSE (SELECT TOP 1 ID FROM X_OTHER_TABLE_2) END AS ID2 FROM X_HEAP; ฉันคาดว่าการประมาณการแถวสุดท้ายสำหรับเคียวรีนี้จะเท่ากับจำนวนแถวในX_HEAPตาราง สิ่งที่ฉันทำในแบบสอบถามย่อยไม่ควรสำคัญกับการประมาณแถวเพราะมันไม่สามารถกรองแถวใด ๆ ออกได้ อย่างไรก็ตามใน SQL Server 2016 ฉันเห็นการประมาณแถวลดลงเป็น 1 เนื่องจากแบบสอบถามย่อย: ทำไมสิ่งนี้ถึงเกิดขึ้น ฉันจะทำอะไรได้บ้าง มันง่ายมากที่จะทำซ้ำปัญหานี้ด้วยไวยากรณ์ที่ถูกต้อง นี่คือคำจำกัดความของตารางหนึ่งชุดที่จะทำ: CREATE TABLE dbo.X_HEAP (ID INT NOT …

4
ไอคอนสีน้ำเงินพร้อมเครื่องหมายคำถามหมายความว่าอะไร
อินสแตนซ์ของ SQL Server นั้นสามารถเข้าถึงได้และดูเหมือนว่าจะใช้ได้ Microsoft SQL Server 2016 (SP1-CU2) (KB4013106) - 13.0.4422.0 (X64) 6 มีนาคม 2017 14:18:16 ลิขสิทธิ์ (c) Microsoft Corporation รุ่นองค์กรองค์กร (64 บิต) บน Windows Server 2012 R2 มาตรฐาน 6.3 (รุ่น 9600) :) (Hypervisor) แต่เครื่องหมายคำถามสีขาวมีความหมายว่าอย่างไร ไอคอนเหล่านี้ไม่หายไปเมื่อฉันรีเฟรช ฉันดูแลระบบภายในเซิร์ฟเวอร์ sql และภายนอกฉันเป็นผู้ดูแลระบบในกล่องนั้น อีกสิ่งที่ฉันสังเกตเห็นคุณสามารถดูในภาพด้านล่าง เหล่านี้เป็น 2 เซสชันการจัดการสตูดิโอที่แตกต่างกัน ด้านบนหนึ่งผมกำลังเข้าสู่ระบบเป็นตัวเองDBA and sysadminในหนึ่งวินาทีผมใช้ Studio จัดการกับและฉันจะใช้บัญชีโดเมนที่จะใช้สำหรับการจำลองแบบซึ่งไม่ได้เป็นrun as …

3
SQL Server ล้างแคชแผนและสถิติการดำเนินการเป็นระยะ
หลังจากอัปเกรด SQL Server 2014 ถึง 2016 เซิร์ฟเวอร์จะทำการรีเซ็ตแผนการดำเนินการและdm*มุมมองแคช(เช่นdm_exec_query_stats) เป็นต้นทุก ๆ สองสามชั่วโมง ราวกับว่ามีคนดำเนินการDBCC FREEPROCCACHEและDBCC DROPCLEANBUFFERSด้วยตนเอง (ยกเว้นไม่มีใครทำมันจะเกิดขึ้นโดยอัตโนมัติ) ฐานข้อมูลเดียวกันทำงานได้ดีบน SQL Server 2014 และ Windows Server 2012 ทุกอย่างดำเนินไปทางใต้หลังจากย้ายไปยัง SQL Server 2016 (และ Windows Server 2016) สิ่งที่ผมตรวจสอบ: ฐานข้อมูลไม่ได้มี "รถยนต์ใกล้ธง" เซิร์ฟเวอร์ SQL ถูกad hoc optimizedตั้งค่าเป็นtrue(ฉันคิดว่ามันจะช่วยไม่ได้) "ที่เก็บแบบสอบถาม" คือ "ปิด" เซิร์ฟเวอร์มีหน่วยความจำ 16 GB ไม่มีประโยชน์ใน "บันทึกของเซิร์ฟเวอร์ SQL" เพียงแค่ข้อความสำรองรายสัปดาห์ ... ฉันตรวจสอบบทความนี้ด้วยhttps://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-set-options …

1
เหตุใดแบบสอบถามนี้จึงไม่ใช้สปูลดัชนี
ฉันกำลังถามคำถามนี้เพื่อให้เข้าใจถึงพฤติกรรมของเครื่องมือเพิ่มประสิทธิภาพและเข้าใจขีด จำกัด รอบ ๆ ดัชนีสิ่งของ สมมติว่าฉันใส่จำนวนเต็มจาก 1 ถึง 10,000 ลงในกอง: CREATE TABLE X_10000 (ID INT NOT NULL); truncate table X_10000; INSERT INTO X_10000 WITH (TABLOCK) SELECT TOP 10000 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM master..spt_values t1 CROSS JOIN master..spt_values t2; และบังคับให้วงวนซ้อนกันเข้าร่วมกับMAXDOP 1: SELECT * FROM X_10000 a INNER JOIN …

1
เหตุใดคำสั่ง MERGE นี้จึงทำให้เซสชันถูกฆ่า
ฉันมีMERGEคำสั่งด้านล่างซึ่งออกกับฐานข้อมูล: MERGE "MySchema"."Point" AS t USING ( SELECT "ObjectId", "PointName", z."Id" AS "LocationId", i."Id" AS "Region" FROM @p1 AS d JOIN "MySchema"."Region" AS i ON i."Name" = d."Region" LEFT JOIN "MySchema"."Location" AS z ON z."Name" = d."Location" AND z."Region" = i."Id" ) AS s ON s."ObjectId" = t."ObjectId" WHEN NOT …

3
varchar (255) หรือ varchar (256)?
ฉันควรใช้varchar(255)หรือvarchar(256)เมื่อออกแบบตาราง? ฉันได้ยินมาว่ามีการใช้หนึ่งไบต์สำหรับความยาวของคอลัมน์หรือเพื่อเก็บข้อมูลเมตา มันสำคัญอีกต่อไปแล้ว ณ จุดนี้? ฉันเห็นโพสต์บนอินเทอร์เน็ตอย่างไรก็ตามพวกเขาใช้กับ Oracle และ MySQL เรามี Microsoft SQL Server 2016 Enterprise Edition แล้วนำไปใช้กับสภาพแวดล้อมนี้ได้อย่างไร ตอนนี้พูดตัวอย่างเช่นถ้าฉันบอกให้ลูกค้าของฉันเก็บตัวอย่างคำอธิบายข้อความถึง 255 ตัวอักษรแทน 256 จะมีความแตกต่าง? สิ่งที่ฉันอ่าน "ด้วยความยาวสูงสุด 255 อักขระ DBMS สามารถเลือกใช้ไบต์เดียวเพื่อระบุความยาวของข้อมูลในฟิลด์ถ้าขีด จำกัด เป็น 256 หรือมากกว่านั้นจำเป็นต้องใช้สองไบต์" มันเป็นเรื่องจริงเหรอ?

1
ทำไมการค้นหา LIKE N '% %' ตรงกับอักขระ Unicode ใด ๆ และ = N' 'ตรงกับหลาย ๆ
DECLARE @T TABLE( Col NCHAR(1)); INSERT INTO @T VALUES (N'A'), (N'B'), (N'C'), (N'Ƕ'), (N'Ƿ'), (N'Ǹ'); SELECT * FROM @T WHERE Col LIKE N'%�%' ผลตอบแทน Col A B C Ƕ Ƿ Ǹ SELECT * FROM @T WHERE Col = N'�' ผลตอบแทน Col Ƕ Ƿ Ǹ การสร้าง "ตัวอักษร" สองไบต์ที่เป็นไปได้ทั้งหมดด้วยด้านล่างแสดงให้เห็นว่า=รุ่นตรงกับ 21,229 ของพวกเขาและLIKE N'%�%'รุ่นทั้งหมดของพวกเขา …

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