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

Microsoft SQL Server ทุกรุ่น (ไม่ใช่ MySQL) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น sql-server-2016 เนื่องจากมักเกี่ยวข้องกับคำถาม

2
การสร้างดัชนีแบบกลุ่มล้มเหลวในการสร้างตาราง
เราพบข้อผิดพลาดเมื่อเรียกใช้สคริปต์ต่อไปนี้ IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='Table_Name') BEGIN CREATE TABLE Table_Name ( Field_Name_1 binary(32) NOT NULL CONSTRAINT PK_Name_Goes_Here PRIMARY KEY NONCLUSTERED , Field_Name_2 int NOT NULL , Field_Name_3 datetime NOT NULL INDEX IX_Name_Goes_Here CLUSTERED ) END โดยเฉพาะอย่างยิ่งมันคือการสร้างดัชนีคลัสเตอร์ที่แสดงข้อผิดพลาดต่อไปนี้: ข่าวสารเกี่ยวกับ 1018, ระดับ 15, สถานะ 1, บรรทัดที่ …

2
เครื่องมือเหล่านี้ยังคงใช้ได้หรือไม่?
ฉันกำลังดูการสัมมนาผ่านเว็บอายุ 7 ปีที่จัดทำโดย Brent Ozar ( https://youtu.be/U_Kle3gKaHc ) และได้ยินรายการแนะนำหลายรายการในเวลานั้น ยูทิลิตี้ SQLDiag SQLNexus เครื่องมือ PAL ที่ปรึกษาการปรับฐานข้อมูล / ตัวช่วยสร้าง BPA (ตัววิเคราะห์วิธีปฏิบัติที่ดีที่สุด) การจัดการตามนโยบายของเซิร์ฟเวอร์ SQL พวกเขาทั้งหมดยังคงใช้ / พิจารณาอยู่หรือมีสิ่งใหม่ที่แทนที่พวกเขาหรือไม่?
10 sql-server  tools 

3
SQL Server จัดการข้อมูลสำหรับการสืบค้นที่มีที่ว่างไม่เพียงพอในแคชบัฟเฟอร์อย่างไร
คำถามของฉันคือ SQL Server จะจัดการกับแบบสอบถามที่ต้องการดึงข้อมูลจำนวนมากลงในแคชบัฟเฟอร์ได้อย่างไร แบบสอบถามนี้จะมีการรวมหลายรายการดังนั้นชุดผลลัพธ์จึงไม่มีอยู่ในรูปแบบนี้บนดิสก์แล้วและจะต้องรวบรวมผลลัพธ์ แต่แม้หลังจากการรวบรวมก็ยังคงต้องการพื้นที่มากกว่าที่มีอยู่ในแคชบัฟเฟอร์ ฉันจะยกตัวอย่าง สมมติว่าคุณมีอินสแตนซ์ของ SQL Server ที่มีเนื้อที่แคชแคชรวม 6GB ฉันเรียกใช้คิวรีที่มีการรวมหลายตัวที่อ่านข้อมูล 7GB ได้ SQL Server สามารถตอบสนองต่อคำขอนี้ได้อย่างไร มันเก็บข้อมูลชั่วคราวใน tempdb หรือไม่? มันล้มเหลวหรือไม่ มันทำสิ่งที่เพิ่งอ่านข้อมูลจากดิสก์และรวบรวมส่วนในเวลาหรือไม่ นอกจากนี้จะเกิดอะไรขึ้นถ้าฉันพยายามคืนข้อมูลทั้งหมด 7GB นั่นจะเปลี่ยนวิธีจัดการกับ SQL Server หรือไม่ ฉันรู้อยู่แล้วว่าหลายวิธีในการแก้ไขปัญหานี้ฉันแค่อยากรู้ว่า SQL Server จัดการกับคำขอนี้เป็นการภายในเมื่อทำงานตามที่ระบุไว้ นอกจากนี้ฉันแน่ใจว่าข้อมูลนี้มีอยู่ที่ใดที่หนึ่ง แต่ฉันประสบความสำเร็จในการค้นหา

3
การสร้างดัชนีที่ไม่เป็นคลัสเตอร์บน SQL Server ที่คำนวณแบบไม่คอลัมน์
ฉันกำลังดิ้นรนเพื่อค้นหาเอกสารใด ๆ เกี่ยวกับวิธีที่ SQL Server จัดเก็บคอลัมน์ที่คำนวณได้แบบไม่ยืนยัน นำตัวอย่างต่อไปนี้: --SCHEMA CREATE TABLE dbo.Invoice ( InvoiceID INT IDENTITY(1, 1) PRIMARY KEY, CustomerID INT FOREIGN KEY REFERENCES dbo.Customer(CustomerID), InvoiceStatus NVARCHAR(50) NOT NULL, InvoiceStatusID AS CASE InvoiceStatus WHEN 'Sent' THEN 1 WHEN 'Complete' THEN 2 WHEN 'Received' THEN 3 END ) GO --INDEX CREATE NONCLUSTERED …

1
สิทธิ์ในทริกเกอร์เมื่อใช้ใบรับรองฐานข้อมูลข้าม
ฉันใช้ใบรับรองฐานข้อมูลข้าม ( ตามที่อธิบายโดย Erland Sommarskog ) เพื่อควบคุมการเข้าถึงฐานข้อมูลบางอย่างในสภาพแวดล้อมของฉัน (SQL Server 2008 R2) ฉันมีโพรซีเดอร์ที่เก็บไว้ในฐานข้อมูล A ซึ่งอัพเดตตารางในฐานข้อมูล B. มันใช้ได้กับโพรซีเดอร์ที่เก็บไว้ในฐานข้อมูล A และตารางในฐานข้อมูล B เสมอจนถึงตอนนี้ ฉันพยายามอัพเดทตารางใน db B แต่ตารางมีทริกเกอร์อยู่ ทริกเกอร์นี้กำลังแทรกข้อมูลเพิ่มเติมในตารางอื่นใน db B ฉันได้รับข้อผิดพลาด: ข่าวสารเกี่ยวกับ 916, ระดับ 14, สถานะ 1, กระบวนงาน table_trigger, บรรทัด 11 เซิร์ฟเวอร์หลัก "sql \ login" ไม่สามารถเข้าถึงฐานข้อมูล "B" ภายใต้บริบทความปลอดภัยปัจจุบัน ฉันพยายามให้สิทธิ์การแทรกสำหรับผู้ใช้ฐานข้อมูล B ที่เชื่อมโยงกับใบรับรองเพื่อแทรกลงในตารางอื่น แต่ไม่ได้แก้ไขข้อผิดพลาด ฉันมีตัวเลือกอื่นนอกเหนือจากการเปลี่ยนทริกเกอร์เพื่อใช้งานWITH …

4
รีเซ็ตผลรวมการรันตามคอลัมน์อื่น
กำลังพยายามคำนวณผลรวมสะสม แต่ควรรีเซ็ตเมื่อยอดรวมสะสมมากกว่าค่าคอลัมน์อื่น create table #reset_runn_total ( id int identity(1,1), val int, reset_val int, grp int ) insert into #reset_runn_total values (1,10,1), (8,12,1),(6,14,1),(5,10,1),(6,13,1),(3,11,1),(9,8,1),(10,12,1) SELECT Row_number()OVER(partition BY grp ORDER BY id)AS rn,* INTO #test FROM #reset_runn_total รายละเอียดดัชนี: CREATE UNIQUE CLUSTERED INDEX ix_load_reset_runn_total ON #test(rn, grp) ข้อมูลตัวอย่าง +----+-----+-----------+-----+ | id | val | …

3
ไม่สามารถกู้คืนฐานข้อมูลที่เปิดใช้งาน TDE เมื่อใช้ MAXTRANSFERSIZE และ CHECKSUM
Update : @AmitBanerjee - ผู้จัดการโปรแกรมอาวุโสสำหรับกลุ่มผลิตภัณฑ์ Microsoft SQL Server ยืนยันว่า MS จะตรวจสอบปัญหาเนื่องจากมีข้อบกพร่อง มีใครพบปัญหาในการกู้คืนข้อมูลสำรองใน SQL Server 2016 ที่เปิดใช้งาน TDE และใช้MAXTRANSFERSIZE> 65536 (ในกรณีของฉันฉันเลือก 65537 เพื่อให้สามารถบีบอัดฐานข้อมูล TDE ) และCHECKSUM? ด้านล่างนี้เป็นคำซ้ำ: --- create database create database test_restore go -- create table create table test_kin (fname char(10)) go -- Enable TDE use master GO CREATE CERTIFICATE …

1
เปลี่ยนคีย์หลักจาก IDENTITY เป็นคอลัมน์ที่คำนวณแล้วโดยใช้ COALESCE
ในความพยายามที่จะแยกแอปพลิเคชันออกจากฐานข้อมูลเสาหินของเราเราได้พยายามเปลี่ยนคอลัมน์ INT IDENTITY ของตารางต่างๆให้เป็นคอลัมน์ที่คำนวณแบบ PERSISTED ที่ใช้ COALESCE โดยพื้นฐานแล้วเราต้องการแอปพลิเคชั่นแยกสองตัวที่ยังคงสามารถอัปเดตฐานข้อมูลสำหรับข้อมูลทั่วไปที่แชร์ในแอปพลิเคชันจำนวนมากในขณะที่ยังคงอนุญาตให้แอปพลิเคชันที่มีอยู่สร้างข้อมูลในตารางเหล่านี้โดยไม่ต้องใช้ โดยพื้นฐานแล้วเราได้ย้ายจากคำจำกัดความคอลัมน์ของ; PkId INT IDENTITY(1,1) PRIMARY KEY ถึง; PkId AS AS COALESCE(old_id, external_id, new_id) PERSISTED NOT NULL, old_id INT NULL, -- Values here are from existing records of PkId before table change external_id INT NULL, new_id INT IDENTITY(2000000,1) NOT NULL ในทุกกรณี PkId ยังเป็นคีย์หลักและในทุกกรณียกเว้นเพียงกรณีเดียวก็คือ …

3
ชื่อเครือข่ายที่ระบุไม่สามารถใช้ได้อีกต่อไป
เรามีแอพพลิเคชั่นที่เข้าถึงฐานข้อมูล (SQL Server 2014 Enterprise Edition) แอปพลิเคชันเรียกขั้นตอนที่เก็บไว้เพื่อเข้าถึงฐานข้อมูล ทุกอย่างทำงานได้ดีจนกระทั่งเมื่อเร็ว ๆ นี้เริ่มส่งข้อผิดพลาดต่อไปนี้และหยุดแอปพลิเคชัน การเริ่มต้นแอพใหม่แก้ไขปัญหาชั่วคราว แต่กลับพบข้อผิดพลาดเดิมหลัง ข้อผิดพลาด: ข้อผิดพลาดระดับการขนส่งเกิดขึ้นเมื่อได้รับผลลัพธ์จากเซิร์ฟเวอร์ (ผู้ให้บริการ: ผู้ให้บริการ TCP ข้อผิดพลาด: 0 - ชื่อเครือข่ายที่ระบุไม่มีให้บริการอีกต่อไป) ฉันทำวิจัยจำนวนมากซึ่งส่วนใหญ่ชี้ให้เห็นว่าเป็นปัญหาเครือข่าย แต่ไม่สามารถหาสิ่งใดเพื่อแก้ไขปัญหาได้จริง มีใครรู้บ้างว่าการเปลี่ยนแปลงใดที่ฉันควรจะทำในด้านฐานข้อมูลเพื่อแก้ไขปัญหานี้ ฉันขอขอบคุณข้อเสนอแนะใด ๆ

1
SQL Server - ทำไมฟังก์ชั่นของหน้าต่างจึงไม่ได้รับอนุญาตให้อัพเดทได้?
เมื่อใช้คำสั่งอัปเดตเช่นข้อความด้านล่างฉันได้รับข้อผิดพลาดที่แจ้งให้ฉันทราบ ฟังก์ชั่นที่มีหน้าต่างสามารถปรากฏได้ในคำสั่ง SELECT หรือ ORDER BY UPDATE dbo.Dim_Chart_of_Account SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) ฉันรู้ว่านี่สามารถทำงานได้อย่างง่ายดายโดยใช้ cte ที่อัพเดตได้เช่นด้านล่าง WITH my_cte AS ( SELECT [Account_Order], LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) AS acc_order_lag FROM Dim_Chart_of_Account ) UPDATE my_cte SET [Account_Order] = acc_order_lag คำถามของฉันคือมีเหตุผลใดบ้างที่ทำให้สิ่งนี้ไม่ได้รับอนุญาตในคำแถลงการปรับปรุงฉันควรหลีกเลี่ยงการใช้ cte ที่อัพเดตได้เป็นวิธีแก้ปัญหาหรือไม่ ความกังวลของฉันคือว่ามีปัญหาเมื่อใช้ฟังก์ชั่นหน้าต่างที่มีคำสั่งปรับปรุงและดังนั้นฉันต้องการที่จะเข้าใจว่านี่เป็นวิธีที่ยอมรับได้หรือควรหลีกเลี่ยง

1
การเอาชนะข้อ จำกัด ของ SQL Server Express Edition
Microsoft SQL Server 2014 Express edition มีการ จำกัด ขนาดฐานข้อมูลไว้ที่ 10GB ตอนนี้เป็นเพียงอินสแตนซ์เดียวหรือขนาดโดยรวมที่รุ่นจะอนุญาตหรือไม่ หรือหมายความว่าฉันสามารถมีฐานข้อมูลได้มากเท่าที่ใช้รุ่นที่ให้แต่ละฐานข้อมูลน้อยกว่า 10GB

3
เหตุใดจึงตั้งค่าสถิติการอัปเดตอัตโนมัติเป็นเท็จ
ฉันเพิ่งได้รับ SQL Server ประมาณ 20 อินสแตนซ์ซึ่งเป็นส่วนหนึ่งของโครงการการได้มาที่กว้างขึ้น ฉันอยู่ระหว่างการประเมินประสิทธิภาพและฉันไม่ชอบวิธีการบำรุงรักษาตามแผนการที่วางไว้ ฉันเห็นดัชนีแบบครอบคลุมรายวันสร้างใหม่ (ฉันสามารถจัดการกับสิ่งนี้ได้) และการอัปเดตสถิติรายวันด้วยตนเอง ประมาณครึ่งหนึ่งของฐานข้อมูลได้รับการตั้งค่าเป็นสถิติการอัพเดทอัตโนมัติ = เท็จด้วยเหตุผลที่ไม่ชัดเจนนอกเหนือจากที่ฉันบอกก็คือการลด 'ปัญหาประสิทธิภาพ' ... ฉันมักจะคิดและทำงานเพื่อตั้งค่านี้เป็น True และรู้สึกว่าการปรับปรุงด้วยตนเองไม่จำเป็นถ้าการตั้งค่านี้เป็นจริง ฉันผิดหรือเปล่า? ทุกคนสามารถอธิบายได้ว่าประโยชน์ที่จะได้รับในการตั้งค่านี้เป็นเท็จ แต่ทำการอัพเดทด้วยตนเองทุกวันแทนหรือไม่ ฉันควรพูดถึงว่าฐานข้อมูลบางส่วนนั้นมีการทำธุรกรรมสูง (มีการแทรกการลบการอัปเดตต่อวันเป็นจำนวนมาก) อื่น ๆ มีอัตราการทำธุรกรรมต่ำและบางรายการเป็นแบบอ่านอย่างเดียว ไม่มีการสัมผัสหรือเหตุผลว่าการตั้งค่าการอัปเดตอัตโนมัติเป็นเท็จ ดูเหมือนจะเป็นลอตเตอรี

2
การปรับปรุงตัวอย่าง SQL Server ของสถิติพลาด RANGE_HI_KEY สูงสุดในคอลัมน์คีย์จากน้อยไปมาก
ฉันกำลังพยายามที่จะเข้าใจว่าการสุ่มตัวอย่างสถิติทำงานอย่างไรและพฤติกรรมด้านล่างนี้เป็นสิ่งที่คาดหวังในการอัปเดตสถิติตัวอย่างหรือไม่ เรามีตารางขนาดใหญ่แบ่งพาร์ติชันตามวันที่โดยมีแถวสองพันล้านแถว วันที่พาร์ทิชันเป็นวันที่ธุรกิจก่อนหน้านี้และเป็นคีย์จากน้อยไปมาก เราโหลดข้อมูลลงในตารางนี้ในวันก่อนหน้าเท่านั้น การโหลดข้อมูลทำงานข้ามคืนดังนั้นในวันศุกร์ที่ 8 เมษายนเราโหลดข้อมูลสำหรับวันที่ 7 FULLSCANหลังจากทำงานในแต่ละเราปรับปรุงสถิติแม้จะใช้กลุ่มตัวอย่างมากกว่า บางทีฉันอาจไร้เดียงสา แต่ฉันคาดหวังว่า SQL Server จะระบุคีย์สูงสุดและคีย์ต่ำสุดในช่วงเพื่อให้แน่ใจว่ามีตัวอย่างช่วงที่ถูกต้อง ตามบทความนี้ : สำหรับที่เก็บข้อมูลแรกขอบเขตที่ต่ำกว่าคือค่าที่เล็กที่สุดของคอลัมน์ที่สร้างฮิสโตแกรม อย่างไรก็ตามมันไม่ได้พูดถึง bucket / ค่าที่มากที่สุด ด้วยการอัพเดตสถิติตัวอย่างในตอนเช้าของวันที่ 8 ตัวอย่างจะพลาดค่าสูงสุดในตาราง (อันดับที่ 7) เนื่องจากเราทำการสืบค้นข้อมูลจากวันก่อนจำนวนมากทำให้มีการประมาณค่า cardinality ที่ไม่ถูกต้องและมีจำนวนการสอบถามที่หมดเวลา SQL Server ไม่ควรระบุค่าสูงสุดสำหรับคีย์นั้นและใช้เป็นค่าสูงสุดRANGE_HI_KEYหรือไม่ หรือเป็นเพียงแค่นี้ข้อ จำกัด ของการปรับปรุงโดยไม่ต้องใช้FULLSCAN? รุ่น SQL Server 2012 SP2-CU7 ขณะนี้เราไม่สามารถอัปเกรดได้เนื่องจากมีการเปลี่ยนแปลงOPENQUERYพฤติกรรมใน SP3 ที่มีการปัดเศษตัวเลขในแบบสอบถามเซิร์ฟเวอร์ที่เชื่อมโยงระหว่าง SQL Server และ Oracle

2
SQL Server ไม่ได้ใช้หน่วยความจำทั้งหมด
ฉันมี SQL Server 2014 โดยมีหน่วยความจำสูงสุดตั้งไว้ที่ 6GB (หน่วยความจำกายภาพคือ 8GB) เซิร์ฟเวอร์เป้าหมายหน่วยความจำบางครั้ง 6GB แล้วลดลงกลับไปรวมเซิร์ฟเวอร์หน่วยความจำ (ประมาณ 5.3GB ไม่เคยถึง 6GB) ผมใช้committed_kbในsys.dm_os_sys_infoเพื่อตรวจสอบหน่วยความจำที่ใช้โดย SQL Server เมื่อฉันตรวจสอบsys.dm_os_buffer_descriptorsฉันเห็นว่าหน้าเว็บหลุดจากแคช - แต่ยังมีหน่วยความจำเหลืออยู่ 700MB หากไม่มีสิ่งใดต้องการหน่วยความจำคุณจะอธิบายข้อเท็จจริงที่ว่าหน้าถูกลบออกจากแคชได้อย่างไร ฉันคาดหวังว่า SQL Server จะลบหน้าเมื่อต้องการหน่วยความจำเท่านั้น ตาราง temp ที่จัดสรรคืนไม่มีปัญหาบนเซิร์ฟเวอร์นี้ My PLE คือ 3632 แคชโพรซีเดอร์คือ 2182 MB ฉันคาดว่าหน้าเว็บจะลดลงเมื่อไม่มีหน่วยความจำเหลือ แต่ฉันมี 700MB ฟรีหรือฉันเข้าใจผิด ใครช่วยกรุณาลองอธิบายพฤติกรรมนี้ได้ไหม SQL Server กำลังอ่านจากดิสก์ด้วยดังนั้นฉันคิดว่าฉันอาจสรุปได้ว่าไม่ใช่ทุกหน้าที่ต้องการอยู่ในหน่วยความจำ ฉันทำการค้นคว้าเพิ่มเติมและฉันอ่านหน้าจำนวนมากจากดิสก์ลงในหน่วยความจำและสังเกตเห็นบางสิ่งใน taskmanager ระหว่างการอ่าน: หน่วยความจำที่ใช้ไปเพิ่มขึ้นจาก 7.0GB …

1
ประสิทธิภาพของตารางในหน่วยความจำแย่กว่าตารางแบบดิสก์
ฉันมีตารางใน SQL Server 2014 ที่มีลักษณะดังต่อไปนี้: CREATE TABLE dbo.MyTable ( [id1] [bigint] NOT NULL, [id2] [bigint] NOT NULL, [col1] [int] NOT NULL default(0), [col2] [int] NOT NULL default(0) ) ด้วย (id1, id2) เป็น PK โดยพื้นฐานแล้ว id1 เป็นตัวระบุเพื่อจัดกลุ่มชุดผลลัพธ์ (id2, col1, col2) ซึ่ง pk คือ id2 ฉันพยายามใช้ตารางในหน่วยความจำเพื่อกำจัดตารางดิสก์ที่มีอยู่ซึ่งเป็นคอขวดของฉัน ข้อมูลในตารางถูกเขียน -> อ่าน -> ลบหนึ่งครั้ง ค่า …

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