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

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

2
hierarchyid CLR โอเพ่นซอร์สหรือไม่
ลำดับชั้นในตัวคือ CLR ที่เก็บพา ธ ในรูปแบบไบนารีที่มีประสิทธิภาพและมีฟังก์ชันการทำงานที่มีประโยชน์อื่น ๆ โชคไม่ดีที่มีขีด จำกัด ว่าเส้นทางที่นำเสนอจะมีความลึกเพียงใดและเป็น ~ 1427 สำหรับต้นไม้ไบนารี ฉันต้องการเพิ่มขีด จำกัด นั้นสำหรับแอปพลิเคชันที่มีอยู่ที่ซับซ้อนซึ่งผูกพันกับขีด จำกัด นี้ ฉันไม่ต้องการเปลี่ยนอินเทอร์เฟซของประเภท ฉันไม่มั่นใจว่าฉันสามารถดึงการเปลี่ยนอินเทอร์เฟซของประเภทนั้นได้โดยไม่ต้องแนะนำข้อบกพร่องเล็กน้อยให้กับโค้ดทั้งหมดที่จะต้องเปลี่ยนตามผล ฉันสามารถ (ในทางทฤษฎี) สร้าง "binhierarchyid" CLR UDT ที่ใช้อินเทอร์เฟซเดียวกับ hierarchyid แต่รองรับเฉพาะต้นไม้ไบนารี ที่ควรได้รับความลึกของฉัน ~ 7000 ในขณะที่ยังคงอยู่ภายในวงเงิน 900 ไบต์ ไม่แน่ใจว่ากิจการขนาดใหญ่จะเป็นเช่นไร มีแหล่งที่มาของลำดับชั้นนี้ CLR อยู่ที่ใดที่หนึ่งหรือไม่เพื่อที่ฉันจะสามารถสร้างของตัวเองโดยใช้โครงสร้างที่รองรับโครงสร้างที่ลึกกว่าได้

3
แผนการดำเนินการไม่ได้ใช้ INDEX แต่ใช้การสแกนตาราง
ฉันรู้ว่าเมื่อใช้ดัชนีหรือการสแกนตาราง SQL Server จะใช้สถิติเพื่อดูว่าอันไหนดีกว่า ฉันมีตารางที่มี 20 ล้านแถว ฉันมีดัชนีใน (SnapshotKey, การวัด) และแบบสอบถามนี้: select Measure, SnapshotKey, MeasureBand from t1 where Measure = 'FinanceFICOScore' group by Measure, SnapshotKey, MeasureBand แบบสอบถามส่งคืนแถว 500k ดังนั้นแบบสอบถามจึงเลือกเพียง 2.5% ของแถวของตาราง คำถามคือทำไม SQL Server ไม่ใช้ดัชนี nonclustered ฉันมีและใช้การสแกนตารางแทน? มีการอัพเดทสถิติ ดีที่จะพูดถึงว่าประสิทธิภาพของแบบสอบถามนั้นดี สแกนตาราง ดัชนีบังคับ โครงสร้างตาราง / ดัชนี CREATE TABLE [t1]( [SnapshotKey] [int] NOT …

1
คำถามเกี่ยวกับรุ่นเก็บ tempdb
เราพบข้อผิดพลาดในวันนี้: ข้อผิดพลาด: 3967, ความรุนแรง: 17 และจากสิ่งที่ฉันสามารถบอกได้ว่ามันเป็น 'เวอร์ชั่นเต็มร้าน' สิ่งนี้ทำให้เกิดคำถามที่ฉันมีปัญหาในการตอบคำถามเนื่องจากที่ร้านของฉันเราไม่เคยมีข้อผิดพลาดนี้มาก่อน: หากมีขนาดสูงสุดที่กำหนดไว้ล่วงหน้า (ขึ้นอยู่กับขนาดtempdbโดยรวมหรืออย่างอื่น) มันเป็นแบบไดนามิกหรือไม่? มีการตั้งค่าที่จะทำให้เป็นแบบไดนามิกหรือไม่? เราสามารถตั้งค่าการแจ้งเตือนตามสิ่งนี้ได้หรือไม่? (เช่น DMVs เพื่อใช้ติดตามขนาด ฯลฯ )

1
เหตุใดฐานข้อมูล MSDB จึงเชื่อถือได้
การTRUSTWORTHYตั้งค่าอาจค่อนข้างอันตรายหากคุณไม่ระวังและยกเว้นในบางกรณีคำแนะนำคือให้ปิดไว้ อย่างไรก็ตามโดยค่าเริ่มต้นMSDBฐานข้อมูลได้TRUSTWORHTYตั้งค่าไว้ONตามค่าเริ่มต้น ฉันสงสัยว่าทำไม ฉันอ่านรายการนี้เป็นBOL แล้ว หมายเหตุโดยค่าเริ่มต้นการตั้งค่า TRUSTWORTHY ถูกตั้งค่าเป็น ON สำหรับฐานข้อมูล MSDB การเปลี่ยนแปลงการตั้งค่านี้จากค่าเริ่มต้นอาจส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิดโดยคอมโพเนนต์ของ SQL Server ที่ใช้ฐานข้อมูล MSDB แต่ฉันอยากรู้เกี่ยวกับเฉพาะ ทำไมMSDBต้องTRUSTWORTHYเปิดใช้งานโดยเฉพาะ ฟังก์ชั่นใช้งานอะไร?

1
SQL Server - ส่งออกตารางขนาดใหญ่โดยไม่มีคีย์หลัก
ฉันต้องการซิงค์ตารางขนาดใหญ่ ~ 500 ล้านแถวโดยไม่มีคีย์หลักระหว่าง SQL Server และ MySQL ตารางมีดัชนีที่ไม่ซ้ำแบบรวมที่ไม่ซ้ำกันเท่านั้น ฉันมีการเชื่อมต่อ ODBC ระหว่างเซิร์ฟเวอร์ แต่การนำเข้าประมาณ 8 ล้านแถวใช้เวลาประมาณ 45 นาทีดังนั้นฉันเชื่อว่าการนำเข้าที่ใหญ่กว่านั้นจะไม่มีเหตุผลเนื่องจากการหยุดชะงักอาจเกิดขึ้นได้ทุกเมื่อ ฉันไม่สามารถเปลี่ยนโครงสร้างตารางที่มีอยู่ฉันสามารถเพิ่มตารางอื่น ๆ ได้ หลังจากอ่านเพิ่มเติม offset / fetch ไม่ใช่ตัวเลือกสำหรับตารางขนาดใหญ่ "เลือก ... โดยที่ x ระหว่าง ... และ ... " ไม่ใช่ตัวเลือกเนื่องจากฉันไม่มีคีย์ที่ไม่ซ้ำ ฉันจะส่งออกตารางเป็นชุดที่รับประกันว่าจะมีแถวทั้งหมดได้อย่างไร ปัญหาของฉันคือเนื่องจากคีย์คลัสเตอร์ไม่ซ้ำกันการเรียงลำดับหลังจากนั้นจะไม่รับประกันว่าแถวฟิสิคัลมีลำดับเดียวกันระหว่างคิวรีแบบต่อเนื่องและการเรียงลำดับหลังจากคอลัมน์ทั้งหมดจะใช้เวลานานเกินไป และคุณจะแนะนำให้โยกย้ายแบตช์ผ่านไฟล์ ODBC หรือ CSV ได้อย่างไร

1
บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL ที่เริ่มการสิ้นสุดด้วยตนเอง
สำหรับเดือนที่ผ่านมาหนึ่งในเซิร์ฟเวอร์ของฉันกำลังประสบปัญหากับตัวแทนของเซิร์ฟเวอร์ SQL มันหยุดอัตโนมัติโดยมีข้อผิดพลาดด้านล่างซึ่งเกิดขึ้นแบบสุ่ม: ไฟล์เอาต์พุตเอเจนต์ Sql [097] ตรวจพบการรั่วไหลของหน่วยความจำ [204 ไบต์] ข้อยกเว้น 5 ตรวจพบที่บรรทัด 403 ของไฟล์ e: \ sql9_sp2_t \ sql \ komodo \ src \ core \ sqlagent \ src \ alerter.cpp SQLServerAgent เริ่มต้นการยกเลิกด้วยตนเอง ฉัน googled ข้อผิดพลาดนี้ แต่ไม่ได้รับข้อมูลมากนัก ทั้ง SQL Server และ Agent ทำงานด้วยบัญชีโดเมนเดียวกัน อย่างไรก็ตามปัญหานี้เกิดขึ้นกับบริการตัวแทนการเซิร์ฟเวอร์ SQL เท่านั้น ฉันยังไม่สามารถดูบริการ บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL …

3
จะทำอย่างไรเมื่อคลัสเตอร์ Always On ของคุณสูญเสียโควรัม?
ฉันกำลังตรวจสอบขั้นตอนการ DR บริษัท ของเราและเมื่อฉันดูออนไลน์เพื่อหาวิธีการแก้ปัญหาในกลุ่ม Always On Cluster ที่เสียโควรัมให้เปรียบเทียบ ฉันเป็นสามหน้าไปสู่ผลลัพธ์ของ Google ก่อนที่จะค้นหาโพสต์ SE แรกในเรื่องการทำสำเนากลุ่มกับการจำลองแบบของทรานแซคชันกับกลุ่มความพร้อมใช้งานซึ่งสัมผัสเพียงเบา ๆ ในเรื่องขององค์ประชุมที่หายไป ในขณะที่ทุกคนเห็นด้วยกับโควรัมการสูญเสียที่ไม่ดีและมีคำแนะนำสำหรับการลดศักยภาพ แต่ก็ยังสามารถเกิดขึ้นได้ ฉันกำลังมองหาคำตอบที่ดีที่ได้รับการตรวจสอบไปยังเส้นทางที่ดีที่สุดในการกู้คืนจากการสูญเสียโควรัม Always On ของกลุ่ม

2
ซีพียู Schedulers ออฟไลน์
ฉันลงชื่อเข้าใช้ระบบไคลเอนต์ใหม่และรัน sp_blitz เพื่อดูว่ามีอะไรสั่นไหว รายงานกลับมาว่า " CPU Schedulers Offline " ซึ่งเป็นตัวใหม่สำหรับฉัน คอร์ CPU บางตัวไม่สามารถเข้าถึง SQL Server ได้เนื่องจากปัญหาการปิดบังหรือความเกี่ยวข้องของสิทธิ์ใช้งาน ยุติธรรมพอฉันเรียกใช้แบบสอบถามพื้นฐาน SELECT DOS.is_online , DOS.status , DOS.* FROM sys.dm_os_schedulers AS DOS ORDER BY 1; รายงานกลับมาว่าฉันมี 8 ชุดให้มองเห็นแบบออฟไลน์ 43 เป็นออนไลน์ ตามความรู้ของฉันไม่มีใครที่ลูกค้ารายนี้จะตั้งค่าความสัมพันธ์ของ CPU ใด ๆ โดยเจตนา ฉันตัดสินใจที่จะดูว่าฉันสามารถถอดได้หรือไม่ เมื่อฉันดูที่หน้าต่างคุณสมบัติฉันเห็นโปรเซสเซอร์ 40 ตัวและไม่มีตัวใดที่ตั้งค่าให้มีความสัมพันธ์กัน ทำไมมี 40 รายการ 43 รายการใน dm_os_schedulers …

2
รายการข้อผิดพลาดการยกเลิกแบทช์ในเซิร์ฟเวอร์ SQL
ใน SQL Server ถ้า XACT_ABORT ปิดอยู่ข้อผิดพลาดบางอย่างจะยุติคำสั่งปัจจุบัน (ตัวอย่างเช่นการจัดหาจำนวนพารามิเตอร์ที่ไม่ถูกต้องให้กับกระบวนงานที่เก็บไว้ซึ่งใช้พารามิเตอร์บางตัว) และข้อผิดพลาดบางอย่างจะยกเลิกชุดทั้งหมด (ตัวอย่างเช่น ขั้นตอนที่ไม่ใช้พารามิเตอร์) [อ้างอิง]: http://www.sommarskog.se/error-handling-I.html#scope-abortion สิ่งที่ฉันอยากรู้คือว่ามีรายการที่ชัดเจนของข้อผิดพลาดที่มีการยกเลิกชุดและคนที่มีคำสั่งยกเลิก

1
สั่งซื้อโดยการเปรียบเทียบตัวอักษรและตัวเลขผสมกัน
เราจำเป็นต้องทำการรายงานบางอย่างเกี่ยวกับค่าที่มักจะรวมสตริงของตัวเลขและตัวอักษรที่ต้องเรียงลำดับ 'ตามธรรมชาติ' สิ่งที่ต้องการเช่น "P7B18" หรือ "P12B3" @ สายอักขระส่วนใหญ่จะเป็นลำดับของตัวอักษรจากนั้นจึงสลับตัวเลข จำนวนของกลุ่มเหล่านี้และความยาวของแต่ละกลุ่มอาจแตกต่างกันไป เราต้องการเรียงลำดับตัวเลขเหล่านี้ตามลำดับตัวเลข เห็นได้ชัดว่าถ้าฉันจัดการค่าสตริงเหล่านั้นโดยตรงด้วยORDER BY"P12B3" จะมาก่อน "P7B18" เนื่องจาก "P1" เก่ากว่า "P7" แต่ฉันต้องการย้อนกลับเพราะ "P7" อยู่ก่อน "P12" ฉันยังต้องการที่จะทำการเปรียบเทียบช่วงเช่น@bin < 'P13S6'หรือบางอย่างเช่น ฉันไม่ต้องจัดการกับจำนวนจุดลอยตัวหรือจำนวนลบ; สิ่งเหล่านี้จะเป็นจำนวนเต็มที่ไม่ติดลบที่เรากำลังทำอยู่ ความยาวสตริงและจำนวนของเซกเมนต์อาจเป็นไปได้เองโดยไม่ จำกัด ขอบเขต ในกรณีของเราปลอกสตริงนั้นไม่สำคัญแม้ว่าจะมีวิธีการในการเปรียบเทียบการเรียงตัว แต่คนอื่น ๆ อาจพบว่ามีประโยชน์ ส่วนที่น่าเกลียดที่สุดของทั้งหมดนี้คือฉันต้องการที่จะทำทั้งการสั่งซื้อและการกรองช่วงในWHEREข้อ ถ้าฉันทำสิ่งนี้ใน C # มันจะเป็นงานที่ค่อนข้างง่าย: ทำการแยกวิเคราะห์เพื่อแยกอัลฟาจากตัวเลขใช้ IComparable และคุณก็ทำได้โดยทั่วไป แน่นอนว่า SQL Server ไม่ได้เสนอฟังก์ชั่นที่คล้ายกันอย่างน้อยที่สุดเท่าที่ฉันทราบ ใครรู้เทคนิคที่ดีในการทำงานนี้หรือไม่? มีความสามารถเล็กน้อยเผยแพร่ในการสร้างประเภท CLR ที่กำหนดเองที่ใช้ …

2
ฟังกลุ่มความพร้อมใช้งาน
ฉันกำลังดูกลุ่มความพร้อมใช้งาน AlwaysOn ยิ่งฉันมองมันมากเท่าไหร่ก็ยิ่งปรากฏว่ากลุ่มฟังความพร้อมใช้งานเป็นจุดล้มเหลวเพียงจุดเดียว ผู้ฟังทำงานตรงไหนจริงๆ? เซิร์ฟเวอร์แยกต่างหากเซิร์ฟเวอร์ SQL หลักพวกเขาทั้งหมดหรือไม่ สมมติว่าฉันมีแอปพลิเคชันทั้งหมดที่ศูนย์ข้อมูลที่สองของฉัน ฉันจะกำหนดค่าผู้ฟังได้อย่างไรว่าพวกเขาจะทำงานที่ไซต์ทั้งสองและแอปพลิเคชันจะชี้ไปที่สำเนาในเครื่องของตนเอง ฉันแน่ใจว่าฉันพลาดอะไรบางอย่างที่นี่ แต่ไม่รู้อะไรเลย

5
การสแกนแม้ว่าฉันคาดหวังการค้นหา
ฉันต้องการเพิ่มประสิทธิภาพของSELECTคำสั่ง แต่ SQL Server จะทำการสแกนดัชนีแทนการค้นหา นี่คือแบบสอบถามที่แน่นอนอยู่ในขั้นตอนการจัดเก็บ: CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL OR [Status] = @Status) AND ( @IsUserGotAnActiveDirectoryUser IS NULL OR ( @IsUserGotAnActiveDirectoryUser IS NOT NULL …

1
วิธีที่มีประสิทธิภาพที่สุดในการเปรียบเทียบชุดผลลัพธ์ขนาดใหญ่สองชุดใน SQL Server 2012
คำแนะนำในปัจจุบันสำหรับวิธีที่มีประสิทธิภาพที่สุดในการเปรียบเทียบชุดผลลัพธ์ / แถวขนาดใหญ่สองชุดดูเหมือนว่าจะใช้ตัวEXCEPTดำเนินการ สคริปต์ SQL ที่มีอยู่ในตัวเองด้านล่างนี้ไม่มีประสิทธิภาพมากเมื่อขนาดของแถวเพิ่มขึ้น (เปลี่ยนค่า @last) ฉันพยายามค้นหารายการที่ไม่ซ้ำในตารางรวม แต่ไม่มีการปรับปรุง DECLARE @first AS INT, @step AS INT, @last AS INT; -- This script is comparing two record sets using EXCEPT -- I want to find additions from OLD to NEW -- As number of rows increase performance gets terrible -- …

2
ทำไมการดำเนินการ TOP ในแผนการดำเนินการ SQL
หลังจากค้นหาไปสักพักหนึ่งฉันตัดสินใจที่จะโพสต์คำถามนี้เพื่อหาคำตอบและขออภัยหากมีคำถาม / คำตอบที่คล้ายกัน เมื่อเรียกใช้คิวรีด้านล่างของเซิร์ฟเวอร์ SQL สองตัวที่คล้ายกันเราพบแผนการดำเนินการที่แตกต่างกันซึ่งมีผลต่อประสิทธิภาพและเราต้องการความช่วยเหลือในการหาสาเหตุ แบบสอบถาม: SELECT process_id INTO #temp FROM revrep_revenue_fact WHERE process_id = 284 DROP TABLE #temp แผนการดำเนินการของเซิร์ฟเวอร์ A แผนการดำเนินการของเซิร์ฟเวอร์ B เซิร์ฟเวอร์ B http://s2.postimg.org/z9fjrfv4n/server_B.png คุณจะสังเกตเห็นว่าเซิร์ฟเวอร์ B มีการดำเนินการทางกายภาพสูงสุดในแผนการดำเนินการจริงและเรากำลังพยายามหาสาเหตุ แบบสอบถามทั้งสองใช้ดัชนีเดียวกันในดัชนีค้นหา นี่คือรายละเอียดบางอย่างของเซิร์ฟเวอร์ A และเซิร์ฟเวอร์ B เซิร์ฟเวอร์ A และ B เป็นทั้งคู่ Windows Server 2008 R2 Standard Service Pack 1 RAM 24GB …

3
กลุ่มความพร้อมใช้งานเสมอให้เปลี่ยนเส้นทางผู้ใช้ไปยังอินสแตนซ์อ่านอย่างเดียวเสมอ
เรามีกลุ่มความพร้อมใช้งานตลอดเวลาซึ่งมีกลุ่มหลักและกลุ่มรองที่เปิดใช้งานการอ่าน เรามีผู้ใช้สำหรับทีมดำเนินการที่ใช้ฐานข้อมูลเพื่อตรวจสอบความถูกต้องของข้อมูลที่พวกเขาตั้งใจจะใส่ไว้ในฐานข้อมูล ผู้ใช้มีสิทธิ์อ่านจากฐานข้อมูลเท่านั้น แต่เมื่อพวกเขาเชื่อมต่อ (ผ่าน SSMS) ผ่าน AG Listener พวกเขาจะเชื่อมต่อกับโหนดที่ใช้งานอยู่เสมอ ฉันพยายามให้พวกเขาเข้าถึงอินสแตนซ์อ่านอย่างเดียวโดยตรง แต่พวกเขาติดอยู่ในหนทางของพวกเขาและหลังจากหนึ่งหรือสองวันพวกเขาก็กลับมาใช้งานโหนดอีกครั้ง มีวิธีใดที่ SQL Server จะบอกว่าผู้ใช้รายนี้มักจะตั้งใจอ่านอย่างเดียวและเปลี่ยนเส้นทางไปที่นั่นหรือไม่? หมายเหตุ: ฉันได้ลองตั้งค่า 'ApplicationIntent = ReadOnly' ในพารามิเตอร์การเชื่อมต่อเพิ่มเติม แต่ดูเหมือนจะไม่เปลี่ยนเส้นทางไปยังโหนดที่สองและไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบเนื่องจากพวกเขาจะลืมตั้งค่าสำหรับผู้เริ่มต้นใหม่อย่างหลีกเลี่ยงไม่ได้ SQL Server 2012 Enterprise, กลุ่มความพร้อมใช้งานหลัก 1, รอง 1 ที่สามารถอ่านได้พร้อมการส่งข้อมูลแบบซิงโครนัส ฉันไม่ต้องการให้ผู้ใช้เชื่อมต่อกับเซิร์ฟเวอร์ที่เชื่อมโยงหรือผ่านเซิร์ฟเวอร์อื่น ๆ ผู้ใช้เชื่อมต่อโดยตรงกับฐานข้อมูลผ่าน SSMS (ไม่มีแอปพลิเคชันอื่น) และฉันต้องการให้ AG Listener (หรือบางสิ่งที่อยู่รอบ ๆ ) สามารถนำผู้ใช้นั้นไปยังโหนดที่สองได้หากมีอยู่ (เนื่องจากมีการเข้าถึงแบบอ่านเท่านั้น ไม่มีประเด็นที่จะเข้าถึงข้อมูลหลัก) โดยที่ผู้ใช้ไม่ต้องทำอะไรเนื่องจากพวกเขาย้ายไปรอบ ๆ เครื่องและจะลืมที่จะเพิ่มความตั้งใจของแอปพลิเคชัน นอกจากนี้ฉันพบว่าการเพิ่มลงในพารามิเตอร์การเชื่อมต่อเพิ่มเติมไม่ได้นำคุณไปยังโหนดรองเสมอ

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