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

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

2
เพิ่มกำลังรอระหว่างจุดตรวจหลังจากอัพเกรดเป็นพื้นที่เก็บข้อมูลที่ดีขึ้น
เมื่อเราย้ายจากแฟลชอาร์เรย์ทั้งหมดที่เก่ากว่าไปเป็นแฟลชอาร์เรย์ทั้งหมดที่ใหม่กว่า (ต่างกัน แต่เป็นผู้จำหน่ายที่ได้รับการยอมรับ) เราเริ่มเห็นการรอคอยเพิ่มขึ้นใน SQL Sentry ระหว่างจุดตรวจ เวอร์ชัน: SQL Server 2012 Sp4 ในที่เก็บข้อมูลเก่าของเราการรอคอยของเราอยู่ที่ประมาณ 2k ด้วย "spikes" ถึง 2,500 ในระหว่างการตรวจสอบกับที่เก็บข้อมูลใหม่ spikes มักจะ 10k กับยอดใกล้ 50k ยามชี้ให้เราเห็นว่ามีความPAGEIOLATCHสุขมากขึ้น ทำการวิเคราะห์ของเราเองดูเหมือนว่าจะเป็นการรวมกันของPAGEIOLATCH and PAGELATCHรอ การใช้ Perfmon โดยทั่วไปเราสามารถพูดได้ว่ายิ่งมีด่านมากขึ้นเท่าไรเราก็ยิ่งได้รับมากขึ้นเท่านั้น ภาระงานของเราส่วนใหญ่จะเขียน (แทรก / ปรับปรุงเป็นหลัก) ผู้จำหน่ายอุปกรณ์จัดเก็บได้พิสูจน์ให้เราเห็นแล้วว่าอาร์เรย์ที่ต่อตรงกับ Fibre Channel นั้นตอบสนองย่อย 1 ms ในระหว่างเหตุการณ์จุดตรวจสอบเหล่านี้ HBA ยังยืนยันหมายเลขของอาเรย์ด้วย เรายังไม่เชื่อว่าเป็นปัญหาการเข้าคิว HBA เนื่องจากความลึกของคิวไม่เคยสูงกว่า 8 เราได้ลองใช้ HBA …

1
ดัชนีค้นหาต้นทุนผู้ประกอบการ
สำหรับแบบสอบถามฐานข้อมูลตัวอย่างAdventureWorksด้านล่าง: SELECT P.ProductID, CA.TransactionID FROM Production.Product AS P CROSS APPLY ( SELECT TOP (1) TH.TransactionID FROM Production.TransactionHistory AS TH WHERE TH.ProductID = P.ProductID ORDER BY TH.TransactionID DESC ) AS CA; แผนการดำเนินการแสดงค่าใช้จ่ายของผู้ให้บริการโดยประมาณ0.0850383 (93%) สำหรับดัชนีค้นหา : ค่าใช้จ่ายนั้นไม่ขึ้นอยู่กับรูปแบบการประมาณเชิงการใช้งาน ไม่ได้เป็นการเพิ่มต้นทุน CPU โดยประมาณและค่าใช้จ่ายI / O โดยประมาณอย่างง่าย ทั้งที่มันเป็นค่าใช้จ่ายสำหรับหนึ่งในการดำเนินการของดัชนีแสวงหาคูณด้วยจำนวนโดยประมาณของการประหารชีวิต หมายเลขค่าใช้จ่ายนี้มาถึงอย่างไร

3
การลบ MSDB เป็นเรื่องปกติไหม
ฉันไม่ได้เป็น DBA ฉันได้ทำสิ่งที่ MSDB ทำเท่านั้นโดยเป็นฐานข้อมูลตัวแทน SQL ของงานและประวัติตอนนี้ฉันหมดพื้นที่ในคลาวด์เซิร์ฟเวอร์ของฉันและฉันมี MSDB ปี 1 ปี 2560 ฉันไม่สามารถลบมันได้หรือฉันจะเก็บไว้เพื่อการสำรอง? MSDB ของฉันคือ 93GB ใน HDD 250GB

3
วิธีการเลือกชุดของค่าที่ไม่ใช่ NULL ล่าสุดต่อคอลัมน์ในกลุ่ม?
ฉันใช้ SQL Server 2016 และข้อมูลที่ฉันใช้อยู่มีแบบฟอร์มต่อไปนี้ CREATE TABLE #tab (cat CHAR(1), t CHAR(2), val1 INT, val2 CHAR(1)); INSERT INTO #tab VALUES ('A','Q1',2,NULL),('A','Q2',NULL,'P'),('A','Q3',1,NULL),('A','Q3',NULL,NULL), ('B','Q1',5,NULL),('B','Q2',NULL,'P'),('B','Q3',NULL,'C'),('B','Q3',10,NULL); SELECT * FROM #tab; ฉันต้องการขอรับค่าที่ไม่ใช่ null สุดท้ายมากกว่าคอลัมน์val1และval2จัดกลุ่มตามและได้รับคำสั่งจากcat tผลลัพธ์ที่ฉันต้องการคือ cat val1 val2 A 1 P B 10 C สิ่งที่ฉันเข้ามาใกล้ที่สุดคือการใช้LAST_VALUEขณะที่เพิกเฉยสิ่งORDER BYที่ไม่สามารถใช้งานได้เนื่องจากฉันต้องการค่าที่ไม่ใช่ค่าว่างที่สั่งล่าสุด SELECT DISTINCT cat, LAST_VALUE(val1) OVER(PARTITION BY cat ORDER BY …

5
ข้อดีและข้อเสียของสคริปต์ของ Ola คืออะไรเมื่อใช้แผนการบำรุงรักษา
คุณช่วยฉันเข้าใจข้อดีและข้อเสียของการใช้โซลูชันของ Ola มากกว่าแผนการบำรุงรักษาหรือไม่? ฉันได้เตรียมงานนำเสนอตาม SQL Pass ( http://www.pass.org/DownloadFile.aspx?File=ebae1b31 ) ซึ่งฉันจะนำเสนอ ฉันกำลังเตรียมสถานการณ์บางอย่างที่โซลูชันของ Ola ระบุและโซลูชันแผนการบำรุงรักษาไม่ได้ โปรดช่วยฉันอธิบายเรื่องเทคนิคนี้ให้มากกว่านี้หน่อยได้ไหม? โดยวิธีการที่เราจัดการเกือบ 150 เซิร์ฟเวอร์ (ผสมของ 2008/2012/2014/2016) ด้วยโซลูชันของ Ola อย่างน้อย 75% ของพวกเขา ฉันชอบบทความนี้โดยเบรนต์โอซาร์ แต่ในความคิดเห็นหนึ่งเบรนต์ได้แนะนำให้ใช้โซลูชันที่อิงกับสคริปต์สำหรับจำนวนเซิร์ฟเวอร์ที่เรามี https://www.brentozar.com/archive/2012/04/maintenance-plans-roombas-suck-good-way/

3
ดัชนีที่ไม่ทำคลัสเตอร์รับประกันเกี่ยวกับลำดับแถวหรือไม่?
ฉันมีนักพัฒนาที่ต้องการเมื่อทำคำสั่งเลือกโดยไม่มีคำสั่งโดยแถวในตารางจะอยู่ในลำดับที่พวกเขาถูกแทรก ผู้พัฒนาแนะนำให้เปลี่ยนจากดัชนีเป็นคลัสเตอร์ที่ไม่ใช่คลัสเตอร์ ด้วยการเปลี่ยนดัชนีจากคลัสเตอร์เป็นไม่ใช่คลัสเตอร์สิ่งนี้ทำให้การรับประกันใด ๆ เกี่ยวกับลำดับของแถวที่จะปรากฏในตารางหรือไม่? คำถามนี้ส่วนใหญ่สำหรับความอยากรู้ของฉัน; ฉันจะแนะนำให้ใช้คอลัมน์ข้อมูลประจำตัวแทน แต่คำขอนี้ทำให้ฉันคิด สามารถใช้การประทับเวลา แต่มีแถวโอกาสที่สามารถแทรกพร้อมกันได้ ขอบคุณล่วงหน้าสำหรับความช่วยเหลือของ.

5
จับคู่ a] (ปิดวงเล็บเหลี่ยม) กับ PATINDEX โดยใช้สัญลักษณ์“ []”
ผมเขียนเอง JSON parser ใน T-SQL † สำหรับวัตถุประสงค์ในการแยกวิเคราะห์ฉันใช้PATINDEXฟังก์ชันที่คำนวณตำแหน่งของโทเค็นจากรายการโทเค็น โทเค็นในกรณีของฉันเป็นอักขระเดี่ยวทั้งหมดและรวมไว้ด้วย: {} []:, โดยปกติเมื่อฉันต้องการค้นหาตำแหน่ง (แรก) ของตัวละครที่กำหนดหลายตัวฉันจะใช้PATINDEXฟังก์ชั่นดังนี้: PATINDEX('%[abc]%', SourceString) ฟังก์ชั่นแล้วจะให้ฉันตำแหน่งแรกของaหรือbหรือc- SourceStringแล้วแต่จำนวนใดจะเกิดขึ้นจะพบแรก ตอนนี้ปัญหาในกรณีของฉันดูเหมือนจะเชื่อมต่อกับ]ตัวละคร ทันทีที่ฉันระบุไว้ในรายการตัวละครเช่นนี้ PATINDEX('%[[]{}:,]%', SourceString) ดูเหมือนว่ารูปแบบที่ฉันตั้งใจไว้จะพังเพราะฟังก์ชั่นไม่เคยพบคู่ที่ตรงกัน ดูเหมือนว่าฉันต้องการวิธีที่จะหลบหนีแรก]เพื่อให้PATINDEXถือว่าเป็นหนึ่งในตัวละครการค้นหามากกว่าสัญลักษณ์พิเศษ ฉันพบคำถามนี้ถามเกี่ยวกับปัญหาที่คล้ายกัน: ต้องการความช่วยเหลือกับตัวดำเนินการ LIKE และวงเล็บเหลี่ยม อย่างไรก็ตามในกรณีนั้น]ก็ไม่จำเป็นต้องระบุในวงเล็บเพราะมันเป็นเพียงหนึ่งตัวละครและมันสามารถระบุได้โดยไม่ต้องวงเล็บรอบพวกเขา โซลูชันทางเลือกซึ่งใช้การหลบหลีกใช้งานได้เฉพาะLIKEและไม่ได้ใช้PATINDEXเพราะใช้การย่อยESCAPEด้วยการสนับสนุนจากอดีตและไม่ใช่อย่างหลัง ดังนั้นคำถามของฉันคือมีวิธีการค้นหา]ด้วยการPATINDEXใช้[ ]สัญลักษณ์แทนหรือไม่ หรือมีวิธีจำลองการทำงานโดยใช้เครื่องมือ Transact-SQL อื่น ๆ หรือไม่? ข้อมูลเพิ่มเติม นี่คือตัวอย่างของแบบสอบถามที่ฉันต้องการใช้PATINDEXกับ[…]รูปแบบดังกล่าวข้างต้น รูปแบบที่นี่ใช้งานได้ (แม้ว่าจะค่อนข้าง ) เพราะมันไม่ได้รวม]ตัวละคร ฉันต้องการที่จะทำงานด้วย]เช่นกัน: WITH data AS (SELECT CAST('{"f1":["v1","v2"],"f2":"v3"}' AS varchar(max)) …

2
การเปิดใช้ Query Store บน msdb มีประโยชน์อย่างไร
ของที่เก็บแบบสอบถามฐานข้อมูลระบบ SQL (ต้นแบบรุ่น msdb, tempdb) สามารถใช้ได้บน msdb เท่านั้น ฉันค้นหาและไม่พบเอกสารใด ๆ เกี่ยวกับที่เก็บแบบสอบถามใน msdb แม้ว่าคุณจะไม่เห็นใน GUI แต่ก็สามารถตรวจสอบได้ในอินสแตนซ์ SQL 2016 ของคุณ Validate Query Store ปิดอยู่ USE msdb SELECT * FROM sys.database_query_store_options; เปิด Query Store USE [master] GO ALTER DATABASE msdb SET QUERY_STORE = ON GO ALTER DATABASE msdb SET QUERY_STORE (OPERATION_MODE = READ_WRITE …

1
การเข้าร่วมแฮชระหว่างตารางต้นแบบ / ตารางรายละเอียดจะสร้างการประมาณค่าเชิงหัวใจต่ำเกินไป
เมื่อเข้าร่วมตารางต้นแบบเข้ากับตารางรายละเอียดฉันจะสนับสนุน SQL Server 2014 ให้ใช้การประมาณค่าเชิงการนับของตารางขนาดใหญ่ (รายละเอียด) เป็นการประมาณค่าความสำคัญของการรวมเอาต์พุตได้อย่างไร ตัวอย่างเช่นเมื่อเข้าร่วมแถวหลัก 10K ถึงแถวรายละเอียด 100K ฉันต้องการให้ SQL Server ประมาณค่าการเข้าร่วมที่แถว 100K - เหมือนกับจำนวนแถวรายละเอียดโดยประมาณ ฉันควรจัดโครงสร้างคิวรีและ / หรือตารางและ / หรือดัชนีของฉันอย่างไรเพื่อช่วยให้ตัวประมาณของ SQL Server ใช้ประโยชน์จากข้อเท็จจริงที่ว่าทุกแถวรายละเอียดมีแถวหลักที่สอดคล้องกันเสมอ (หมายความว่าการเข้าร่วมระหว่างพวกเขาไม่ควรลดค่าประมาณของ cardinality) นี่คือรายละเอียดเพิ่มเติม ฐานข้อมูลของเรามีคู่ของตารางต้นแบบ / รายละเอียด: VisitTargetมีหนึ่งแถวสำหรับแต่ละธุรกรรมการขายและVisitSaleมีหนึ่งแถวสำหรับแต่ละผลิตภัณฑ์ในแต่ละธุรกรรม มันเป็นความสัมพันธ์แบบหนึ่งต่อหลายคน: หนึ่งแถว VisitTarget สำหรับแถว VisitSale เฉลี่ย 10 แถว ตารางมีลักษณะดังนี้: (ฉันลดความซับซ้อนของคอลัมน์ที่เกี่ยวข้องสำหรับคำถามนี้เท่านั้น) -- "master" table CREATE TABLE VisitTarget ( …

2
SMO, SSMS ช้าสำหรับการจัดการ SQL Server ใน Docker เมื่อเชื่อมต่อกับ localhost
TL; DR:เมื่อเชื่อมต่อคอนเทนเนอร์ SQL Server Docker ของฉันผ่านชื่อที่แปลงเป็นลูปแบ็ค IPv6 ( ::1) การโทร SMO ช้ามาก เมื่อใช้127.0.0.1งานก็รวดเร็ว ฉันพยายามที่จะเรียนรู้วิธีการใช้หางภาพMicrosoft / MSSQL เซิร์ฟเวอร์หน้าต่างนักพัฒนา ตามเอกสารของ Microsoft คอนเทนเนอร์นี้จะเปิดเผยพอร์ต 1433 TCP เท่านั้น docker run -d -p 1433:1433 -e sa_password=Passw0rd! -e ACCEPT_EULA=Y -v C:\dockerdb:C:\dockerdb microsoft/mssql-server-windows-developer ฉันใช้คอนเทนเนอร์ใน Windows 10 และประสบความสำเร็จในการเริ่มต้นพิสูจน์ตัวตนด้วยการรับรองความถูกต้องของ SQL Server และการรันคิวรีกับอินสแตนซ์ที่ใช้ sqlcmd และ SSMS 17.4 บนโฮสต์ windows (เชื่อมต่อกับ localhost …

1
จะถอนการติดตั้ง SQL Server 2014 Standard Edition โดยไม่ต้องติดตั้งสื่อได้อย่างไร
ฉันมีสำเนาของ SQL Server 2014 Standard ติดตั้งอยู่ในกล่อง dev ของฉันเป็นอินสแตนซ์เริ่มต้นสำหรับสองสามปี ฉันติดตั้งมาตรฐานบนเครื่องของฉันเพราะฉันมีใบอนุญาตฟรีที่ฉันสามารถใช้ผ่านการสมัคร MSDN ของฉัน ตอนนี้ฉันต้องการถอนการติดตั้ง SQL Server 2014 และทำให้ SQL Server 2017 Developer Edition เป็นอินสแตนซ์เริ่มต้นของฉัน ฉันพยายามถอนการติดตั้ง SQL Server 2014 ผ่านทางเวิร์กโฟลว์ Add / Remove Programs มาตรฐาน แต่หลังจากถามฉันว่าคุณสมบัติใดที่ฉันต้องการถอนการติดตั้งจะแจ้งให้ฉันสำหรับไดเรกทอรีที่มีสื่อถอนการติดตั้ง น่าเสียดายที่ฉันไม่ได้บันทึกแพ็คเกจดาวน์โหลด SQL Server 2014 ที่ฉันได้รับจาก MSDN และฉันไม่สามารถเข้าถึง MSDN ได้อีกต่อไป ฉันตรวจสอบ My Visual Studio แล้ว แต่กลับไปที่ SQL Server …

2
การปรับประสิทธิภาพในแบบสอบถาม
การค้นหาความช่วยเหลือเพื่อปรับปรุงประสิทธิภาพการสืบค้นนี้ SQL Server 2008 R2 Enterprise , RAM สูงสุด 16 GB, CPU 40, Max Parallelism 4 SELECT DsJobStat.JobName AS JobName , AJF.ApplGroup AS GroupName , DsJobStat.JobStatus AS JobStatus , AVG(CAST(DsJobStat.ElapsedSec AS FLOAT)) AS ElapsedSecAVG , AVG(CAST(DsJobStat.CpuMSec AS FLOAT)) AS CpuMSecAVG FROM DsJobStat, AJF WHERE DsJobStat.NumericOrderNo=AJF.OrderNo AND DsJobStat.Odate=AJF.Odate AND DsJobStat.JobName NOT …

3
วิธีการใบ้การเข้าร่วมหลายคนใน SQL Server
ฉันมี 3 "ใหญ่" ตารางที่เข้าร่วมในคอลัมน์ (ทั้งสองint) ตารางที่ 1 มีประมาณ 200 ล้านแถว ตารางที่ 2 มีประมาณ 1.5 ล้านแถว ตารางที่ 3 มีประมาณ 6 ล้านแถว แต่ละตารางมีดัชนีคลัสเตอร์บนKey1, Key2และจากนั้นหนึ่งคอลัมน์อื่น ๆ Key1มี cardinality ต่ำและเบ้มาก มันถูกอ้างอิงอยู่เสมอในWHEREข้อ Key2ไม่เคยถูกกล่าวถึงในWHEREข้อ การเข้าร่วมแต่ละครั้งมีหลายต่อหลายคน ปัญหาเกิดขึ้นจากการประมาณเชิงปริมาณ การประมาณผลลัพธ์ของการรวมแต่ละครั้งจะเล็กลงแทนที่จะใหญ่ขึ้น ซึ่งจะส่งผลในการประมาณการขั้นสุดท้ายของหลายร้อยต่ำเมื่อผลลัพธ์ที่แท้จริงเป็นล้าน มีวิธีใดบ้างที่ฉันจะรู้ว่า CE เป็นตัวประมาณการที่ดีกว่า? SELECT 1 FROM Table1 t1 JOIN Table2 t2 ON t1.Key1 = t2.Key1 AND t1.Key2 = …

3
ลบล้านแถวออกจากตาราง SQL
ฉันต้องลบมากกว่า 16 ล้านระเบียนจากตารางแถว 221 ล้านและมันจะช้ามาก ฉันขอขอบคุณถ้าคุณแบ่งปันคำแนะนำในการทำโค้ดด้านล่างให้เร็วขึ้น: SET TRANSACTION ISOLATION LEVEL READ COMMITTED; DECLARE @BATCHSIZE INT, @ITERATION INT, @TOTALROWS INT, @MSG VARCHAR(500); SET DEADLOCK_PRIORITY LOW; SET @BATCHSIZE = 4500; SET @ITERATION = 0; SET @TOTALROWS = 0; BEGIN TRY BEGIN TRANSACTION; WHILE @BATCHSIZE > 0 BEGIN DELETE TOP (@BATCHSIZE) FROM MySourceTable …

1
นายหน้าบริการ - อายุการสนทนาหรือไม่
เราพยายามให้ Service Broker ทำงานในสภาพแวดล้อมของเราเพื่อแก้ไขปัญหาทางธุรกิจ ฉันไม่รู้ว่าชื่อข้อความนั้นดีหรือไม่ แต่คำถามของฉันอยู่ด้านล่าง แต่มันอาจไม่ใช่คำถามที่ดีดังนั้นหลังจากนั้นคือสิ่งที่เรากำลังทำอยู่และทำไมฉันจึงคิดว่ามันเป็นคำถามที่ถูกต้อง ควรส่งข้อความในการสนทนากี่ข้อความก่อนที่จะสิ้นสุดการสนทนา เราต้องการใช้ Service Broker เพื่ออัพเดทตารางผลลัพธ์แบบอะซิงโครนัส ตารางผลลัพธ์แบนและรวดเร็ว เรามีทริกเกอร์ในตารางฐานที่ส่งข้อความพร้อมกับตารางและคีย์หลัก เรามีสามคิว: เวลาตอบสนองต่ำ - เป้าหมายคือ 15 วินาทีในการประมวลผล มันจัดการรายการที่เปลี่ยนแปลงที่เกี่ยวข้องกับรายการที่เฉพาะเจาะจง คิวจำนวนมาก - วัตถุประสงค์คือ 5 นาทีในการดำเนินการ มันจัดการเมื่อมีการเปลี่ยนแปลงบางอย่างที่มีผลต่อหลายร้อย (หรือหลายพัน) รายการ มันแบ่งรายชื่อของรายการที่ได้รับผลกระทบและฟีดพวกเขาไปยังคิวเวลาแฝงต่ำรอการตัดบัญชี เวลารอตอบสนองต่ำรอการตัดบัญชี - วัตถุประสงค์คือ 30 นาทีในการดำเนินการ สิ่งนี้จะประมวลผลรายการ แต่จากคิวจำนวนมากเท่านั้น โดยทั่วไปหากข้อมูลของลูกค้าอัพเดท ที่มีผลต่อผลิตภัณฑ์จำนวนมากเพื่อให้ส่งไปยังคิวจำนวนมากเพื่อการประมวลผลที่ช้าลง อย่างไรก็ตามหากผลิตภัณฑ์ได้รับการอัพเดตผลิตภัณฑ์นั้นจะถูกส่งไปยังคิวเวลาแฝงต่ำ เราใช้การสนทนาที่คล้ายกับบล็อกของ Remus Rusanu อีกครั้งhttp://rusanu.com/2007/04/25/reusing-conversations/ยกเว้นว่าเราดำเนินการตามโมดูลัสของคีย์หลัก สิ่งนี้มีประโยชน์ด้านการช่วยเหลือในการทำซ้ำของคีย์หลัก ดังนั้นเราจึงใช้การสนทนาอีกครั้งและอยู่ในหลักเกณฑ์ของเรา ด้วยสองเธรดฉันสามารถเขียนข้อความถึง 125 ข้อความ / …

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