ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

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 โดยประมาณอย่างง่าย ทั้งที่มันเป็นค่าใช้จ่ายสำหรับหนึ่งในการดำเนินการของดัชนีแสวงหาคูณด้วยจำนวนโดยประมาณของการประหารชีวิต หมายเลขค่าใช้จ่ายนี้มาถึงอย่างไร

2
ชาติเด็กกำพร้าคืออะไร?
สาขามีการอธิบายในคำตอบให้กับคำถามอื่นบนเว็บไซต์นี้ คำตอบที่กล่าวถึงการแปลงร่างเป็น 'กำพร้า': ... มีปัจจัยอื่น ๆ ที่ส่งผลให้เกิดองค์กร ORPHANED และการสำรองข้อมูล OBSOLETE ... ฉันเห็นจากเอกสารของออราเคิลที่V$DATABASE_INCARNATIONมีSTATUSคอลัมน์ที่สามารถมีค่าของORPHAN, CURRENTหรือPARENTที่จะต้องเกี่ยวข้อง อะไรคือ 'เด็กกำพร้า' แปลงและสิ่งที่ขั้นตอนที่จะส่งผลในแถวด้วยSTATUS= ORPHANในV$DATABASE_INCARNATION?

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
MySQL - ผลรวมสูงสุดในแต่ละเดือนที่แตกต่างกันและมีความสัมพันธ์กันมาหลายปี
คำถามนี้ได้รับแรงบันดาลใจจากคนนี้ [ปิด] และเป็นจริงเหมือนกับที่นี้หนึ่งแต่ใช้ RDBMS ที่แตกต่างกัน (เทียบกับ PostgreSQL MySQL) สมมติว่าฉันมีรายการของเนื้องอก (ข้อมูลนี้จำลองจากข้อมูลจริง): CREATE table illness (nature_of_illness VARCHAR(25), created_at DATETIME); INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40'); INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40'); INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40'); INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40'); INSERT INTO illness VALUES ('Cervix', …
9 mysql-5.6 

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 …

1
เวลาออมแสง
ในสภาพแวดล้อมของฉันมีเซิร์ฟเวอร์ที่ทำงานบนการสำรองข้อมูลดั้งเดิมและแผน Ola Hallengren เซิร์ฟเวอร์ของเรามีการรวมกันของปี 2008, 2012 และ 2014 การสำรองข้อมูลเต็มรูปแบบทั้งหมดจะดำเนินการเวลา 12.00 น. และมีการสำรองข้อมูลบันทึกทุก 15 นาที ฉันไม่เคยคิดที่จะปรับเวลาตามฤดูกาลมาก่อนดังนั้นโปรดบอกฉันว่าควรปรับอะไรบ้าง การสำรองข้อมูลเต็มรูปแบบ 12am จะได้รับผลกระทบหรือไม่และจะเกิดอะไรขึ้นกับการสำรองข้อมูลบันทึก

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 = …

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