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

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

3
ฉันจะรับรายการตารางที่แบ่งพาร์ติชันทั้งหมดในฐานข้อมูลของฉันได้อย่างไร
ฉันจะรับรายการตารางที่แบ่งพาร์ติชันทั้งหมดในฐานข้อมูลของฉันได้อย่างไร ฉันควรดูตารางระบบ / DMVs ใด

2
วิธีการกู้คืนฐานข้อมูล“ บรรจุอยู่”? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันเพิ่งพยายามคืนค่าการสำรองข้อมูล SQL Server ในพื้นที่ของฉันจากเครือข่าย ฉันประหลาดใจที่ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: เกี่ยวกับข่าวสารเกี่ยวกับ 12824 ระดับ 16 สถานะ 1 บรรทัด 3 ค่า sp_configure 'การรับรองความถูกต้องของฐานข้อมูล' ต้องถูกตั้งค่าเป็น 1 เพื่อคืนค่าฐานข้อมูลที่มีอยู่ คุณอาจต้องใช้ RECONFIGURE เพื่อตั้งค่า value_in_use ข่าวสารเกี่ยวกับ 3013 ระดับ 16 สถานะ 1 บรรทัด 3 RESTORE DATABASE ถูกยกเลิกอย่างผิดปกติ ฉันต้องทำตามขั้นตอนใดบ้างเพื่อกู้คืนฐานข้อมูลได้สำเร็จ

2
ตำแหน่งของอนุประโยค ON หมายถึงอะไรจริง ๆ ?
JOIN ... ON ...ไวยากรณ์ปกติเป็นที่รู้จักกันดี แต่มันก็เป็นไปได้ที่จะวางตำแหน่งONประโยคแยกจากJOINที่มันสอดคล้องกับ นี่คือสิ่งที่ไม่ค่อยเห็นในทางปฏิบัติไม่พบในบทช่วยสอนและฉันไม่ได้พบแหล่งข้อมูลบนเว็บใด ๆที่แม้แต่กล่าวถึงสิ่งนี้ว่าเป็นไปได้ นี่คือสคริปต์ที่จะเล่นกับ: SELECT * INTO #widgets1 FROM (VALUES (1), (2), (3)) x(WidgetID) SELECT * INTO #widgets2 FROM (VALUES (1, 'SomeValue1'), (2, 'SomeValue2'), (3, 'SomeValue3')) x(WidgetID, SomeValue) SELECT * INTO #widgetProperties FROM (VALUES (1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')) x(WidgetID, PropertyName) --q1 SELECT …
23 sql-server  t-sql 

3
ให้ระบบไฟล์เข้าถึงบัญชีเสมือน SQLSERVERAGENT
ฉันพยายามให้สิทธิ์การNT Service\SQLSERVERAGENTเข้าถึงระบบไฟล์บัญชี Windows ตามคำตอบที่ทำเครื่องหมายไว้ในคำถามนี้ ฉันเชื่อว่าเป็นบัญชีบริการเสมือนจริงและไม่ปรากฏในแผงควบคุม ->พื้นที่บัญชีผู้ใช้ ฉันจะอนุญาตให้บัญชีบริการนี้เข้าถึงระบบไฟล์ได้อย่างไร โดยเฉพาะใน Windows 7 ฉันอ่านหลายวิธีแล้วและดูเหมือนจะไม่มีตัวเลือกสำหรับฉัน ฉันลองใช้วิธี PowerShell แต่คำสั่ง AD ไม่ใช่คำสั่งที่ถูกต้อง ฉันยังดาวน์โหลดและติดตั้งแพตช์ windows ที่จำเป็นสำหรับคำสั่งเหล่านั้น ฉันได้อ่านด้วยว่าฉันควรจะทำสิ่งนี้ผ่านทางตัวจัดการการกำหนดค่าเซิร์ฟเวอร์ SQL หรือสตูดิโอการจัดการ ฉันไม่สามารถคิดออกว่าจะปรับเปลี่ยนสิทธิ์เหล่านี้ได้ที่ไหน กระบวนการ บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL ล้มเหลวในการเริ่มต้นด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้: Login failed for user 'NT SERVICE\SQLSERVERAGENT'. Reason: Failed to open the explicitly specified database 'msdb'. [CLIENT: <local machine>] จาก Googling ของฉันมันเกี่ยวข้องกับการอนุญาตของบัญชีนี้ ฉันไม่แน่ใจว่าฐานข้อมูลเสียหาย …

3
คำเตือนสำหรับสถิติที่ขาดหายไปในแผนการดำเนินการ
ฉันมีสถานการณ์ที่ฉันไม่เข้าใจ แผนการดำเนินการของ SQL Server ของฉันบอกฉันว่าฉันไม่มีสถิติในตาราง แต่สถิติถูกสร้างขึ้นแล้ว: แต่ถ้าเราดูที่โต๊ะเราจะเห็นว่ามีสถิติที่สร้างขึ้นโดยอัตโนมัติ: บางคนสามารถช่วยให้เข้าใจว่าเป็นอย่างไร Auto_Update และ Auto_Create เปิดสถิติในฐานข้อมูลปัจจุบัน ฉันใช้ SQL Server 2014


2
วิธีการแบ่งพาร์ติชันตารางที่ไม่มีการแบ่งพาร์ติชันที่มีอยู่
ฉันมีตารางที่มีข้อมูลอยู่แล้ว: dbo.Test (col1,col2,col3....) ON [PRIMARY] ฉันต้องเปลี่ยนตารางนี้เพื่อให้มีการแบ่งพาร์ติชันเช่นนี้: dbo.Test(col1,col2,col3....) ON Ps_Date(Col2) ฉันจะทำสิ่งนี้ให้สำเร็จโดยไม่ต้องวางและสร้างโต๊ะขึ้นใหม่ได้อย่างไร?

1
ทำไมดัชนีที่ไม่ได้จัดกลุ่มของฉันใช้พื้นที่มากขึ้นเมื่อฉันลบแถว
ฉันมีตารางขนาดใหญ่ที่มี 7.5 พันล้านแถวและ 5 ดัชนี เมื่อฉันลบประมาณ 10 ล้านแถวฉันสังเกตว่าดัชนีที่ไม่ได้จัดกลุ่มดูเหมือนจะเพิ่มจำนวนหน้าเว็บที่เก็บไว้ ฉันเขียนแบบสอบถามdm_db_partition_statsเพื่อรายงานความแตกต่าง (หลัง - ก่อน) ในหน้า: ดัชนี1เป็นดัชนีคลัสเตอร์ดัชนี2เป็นคีย์หลัก ส่วนอื่น ๆ นั้นไม่เป็นแบบคลัสเตอร์และไม่ซ้ำใคร เหตุใดหน้าต่างๆจึงเพิ่มขึ้นสำหรับดัชนีที่ไม่ใช่คลัสเตอร์เหล่านั้น ฉันคาดว่าตัวเลขจะแย่ที่สุดเหมือนกัน ฉันเห็นเคาน์เตอร์วัดประสิทธิภาพรายงานการเพิ่มขึ้นของการแยกหน้าระหว่างการลบ เมื่อลบแล้วระเบียนผีต้องย้ายไปหน้าอื่นหรือไม่ สิ่งนี้เกี่ยวข้องกับ "ตัวระบุเฉพาะ" หรือไม่ เรากำลังอยู่ระหว่างการเปิดตัว RCSI แต่ตอนนี้ RCSI ปิดอยู่ มันเป็นโหนดหลักในกลุ่มความพร้อมใช้งาน ฉันรู้ว่าสแน็ปช็อตนั้นใช้กับคนที่สอง ฉันจะแปลกใจถ้านั่นเกี่ยวข้อง ฉันวางแผนที่จะขุดลงในนี้ (ดูผลลัพธ์หน้า dbcc) เพื่อเรียนรู้เพิ่มเติม หวังว่าจะมีบางคนเห็นสิ่งที่คล้ายกัน

3
ฐานข้อมูลกลุ่มความพร้อมใช้งานของเซิร์ฟเวอร์กระจาย SQL ไม่ซิงค์หลังจากรีบูตเซิร์ฟเวอร์
เราพร้อมที่จะทำการอัปเกรดจำนวนมากบนเซิร์ฟเวอร์ SQL ของเราและกำลังสังเกตเห็นพฤติกรรมที่ผิดปกติบางอย่างกับกลุ่มความพร้อมใช้งานแบบกระจายที่ฉันพยายามแก้ไขก่อนที่จะดำเนินการต่อ เดือนที่แล้วฉันอัปเกรดเซิร์ฟเวอร์รองระยะไกลจาก SQL Server 2016 เป็น SQL Server 2017 เซิร์ฟเวอร์นี้เป็นส่วนหนึ่งของกลุ่มความพร้อมใช้งานแบบกระจาย (DAG)และกลุ่มความพร้อมใช้งานแยกต่างหาก(AG)หลายกลุ่ม เมื่อเราอัปเกรดเซิร์ฟเวอร์นี้เราไม่ทราบว่าจะเข้าสู่สถานะที่อ่านไม่ได้ดังนั้นในช่วงเดือนที่ผ่านมาเราได้พึ่งพาเซิร์ฟเวอร์หลักเพียงอย่างเดียว เป็นส่วนหนึ่งของการอัปเกรดที่จะเกิดขึ้นฉันใช้CU 4 patch กับเซิร์ฟเวอร์และทำการบูทใหม่ เมื่อเซิร์ฟเวอร์กลับมาออนไลน์อีกครั้งรองที่เพิ่งได้รับการปรับปรุงแสดงให้เห็นว่า DAGs / AG ทั้งหมดซิงค์กันโดยไม่มีปัญหาใด ๆ อย่างไรก็ตามตัวละครหลักกำลังแสดงเรื่องราวที่แตกต่างกันมาก มีรายงานว่า AG แยกต่างหากกำลังซิงค์โดยไม่มีปัญหาใด ๆ แต่ DABs ความได้ในไม่ Synchronzing / ไม่ดีต่อสุขภาพของรัฐ หลังจากตื่นตระหนกในตอนแรกฉันพยายามทำสิ่งต่าง ๆ ต่อไปนี้เพื่อให้สิ่งต่าง ๆ ซิงโครไนซ์อีกครั้งใน DAG: จากหลักฉันหยุดและกลับมาเคลื่อนไหวข้อมูลต่อ สิ่งนี้ไม่ได้เริ่มซิงค์ข้อมูล ในครั้งที่สอง (อันที่ฉันเพิ่งแก้ไข) ฉันรันALTER DATABASE [<database] SET HADR …

4
การทำดัชนีพื้นที่ใหญ่กว่าพื้นที่ข้อมูลนั้นเป็นสิ่งที่ไม่ดีหรือไม่?
บ่อยครั้งที่ฉันต้องการเรียกใช้แบบสอบถามกับตารางขนาดใหญ่ที่ไม่มีดัชนีที่ถูกต้อง ดังนั้นฉันขอให้ DBA สร้างดัชนีดังกล่าว สิ่งแรกที่เขาทำคือดูที่ตารางสถิติและดูขนาดพื้นที่ดัชนี บ่อยครั้งที่เขาจะบอกให้ฉันหาวิธีแก้ปัญหาทางเลือกเพราะ "ดัชนีนั้นใหญ่กว่าตาราง" เขารู้สึกว่าดัชนีต้องเล็กกว่าข้อมูลเพราะเขาบอกฉันว่า "คุณเคยเห็นดัชนีในหนังสือหรือไม่มันเล็กกว่าหนังสือมากและนั่นเป็นวิธีที่ดัชนีตารางควร" ฉันไม่รู้สึกว่าปรัชญาของเขาถูกต้อง แต่ฉันไม่สามารถท้าทายเขาได้เพราะเขาเป็นผู้นำ DBA และฉันเป็นนักพัฒนา ฉันรู้สึกว่าแบบสอบถามต้องการดัชนีควรสร้างดัชนีแทนการค้นหา "วิธีแก้ไข" ที่เพิ่งสร้าง SP ที่ไม่สามารถอ่านได้และไม่สามารถแก้ไขได้ ฉันกำลังเลือกคอลัมน์ที่ต้องการเท่านั้น ปัญหาคือฉันกำลังกรองตามวันที่ดังนั้นเครื่องมือจำเป็นต้องทำการสแกนตารางเพื่อให้ตรงกับคอลัมน์ แบบสอบถามทำงานวันละครั้งตอนกลางคืนเพื่อรวบรวมสถิติ แต่ใช้เวลา 15 นาทีในการทำงาน (เรามีกฎที่ยากและรวดเร็ว: ไม่มีขั้นตอนใดที่ควรใช้เวลามากกว่า 3 นาที) DBA แสดงสถิติดัชนีให้ฉัน มีประมาณ 10 ดัชนีในตารางนั้นมีเพียง 6 ดัชนีเท่านั้นที่ใช้ (สถิติแสดงให้เห็นว่ามีจำนวนการเข้าศูนย์ถึง 4 ของดัชนี) นี่เป็นระบบขนาดใหญ่ที่มีผู้พัฒนามากกว่า 20 คนเข้าร่วม ดัชนีถูกสร้างขึ้นด้วยเหตุผลใดก็ตามและอาจไม่ได้ใช้อีกต่อไป เราจำเป็นต้องสนับสนุน SQL Server 2008 เนื่องจากเป็นสิ่งที่ฐานข้อมูลการทดสอบทำงานอยู่ แต่ลูกค้าทั้งหมดในปี 2014 และ …
22 sql-server  index 

2
ทริกเกอร์รวบรวมในแต่ละครั้งหรือไม่
เรากำลังแก้ไขปัญหาเซิร์ฟเวอร์ที่มีการใช้งาน CPU สูง หลังจากพบว่าคำค้นหาไม่ได้เป็นสาเหตุของปัญหาจริงๆเราเริ่มมองหาการรวบรวม การตรวจสอบประสิทธิภาพแสดงน้อยกว่า 50 การคอมไพล์ / วินาทีและน้อยกว่า 15 การคอมไพล์ / วินาที หลังจากใช้งานเซสชัน XE เพื่อค้นหาการรวบรวมเราจะเห็นการรวบรวมนับพันต่อวินาที ระบบนี้ใช้ทริกเกอร์เพื่อตรวจสอบการเปลี่ยนแปลง การรวบรวมส่วนใหญ่เกิดจากทริกเกอร์ ทริกเกอร์การอ้างอิง sys.dm_tran_active_transactions ความคิดแรกของเราคือการอ้างอิง DMV ในทริกเกอร์อาจทำให้คอมไพล์ในแต่ละครั้งหรืออาจเป็นเพียง DMV ที่เจาะจงนี้จะทำให้เกิดขึ้น ดังนั้นฉันจึงเริ่มทดสอบทฤษฎีนั้น มันจะรวบรวมในแต่ละครั้ง แต่ฉันไม่ได้ตรวจสอบว่ามีการทริกเกอร์รวบรวมในแต่ละครั้งจะถูกเรียกเมื่อมันไม่ได้อ้างอิง DMV และแทน hardcodes ค่า มันยังคงรวบรวมทุกครั้งที่มันถูกเรียก การปล่อยไกหยุดการรวบรวม เรากำลังใช้ sqlserver.query_pre_execution_showplan ในเซสชั่น XE เพื่อติดตามการคอมไพล์ ทำไมจึงมีความคลาดเคลื่อนระหว่างสิ่งนั้นกับตัวนับ PerfMon เป็นเรื่องปกติหรือไม่ที่คุณได้รับเหตุการณ์การคอมไพล์ทุกครั้งที่ทริกเกอร์รัน? สคริปต์ Repro: CREATE TABLE t1 (transaction_id int, Column2 …

2
ใช้ข้อความสูงสุด MAX หรือเฉพาะเจาะจงน้อยกว่านั้น
มีคนถูกตรวจสอบรหัส DDL ของการสร้างตารางและแนะนำเมื่อพวกเขาเห็นผมเห็นโดยใช้VARCHAR(256)ฟิลด์สำหรับข้อความที่ผมคาดหวังว่าจะสวยขนาดเล็กเหมือนชื่อหรือสิ่งที่ฉันควรจะเสมอเพียงแค่ใช้VARCHAR(MAX)และเชื่อมโยงทำไมต้องใช้อะไร แต่ (สูงสุด varchar ) . ฉันอ่านมัน แต่ดูเหมือนว่ามันล้าสมัยเพราะมันมุ่งเน้นไปที่ปี 2005 และดูเหมือนจะไม่ได้เสนอเหตุผลที่แท้จริงในการจัดสรรที่อาจเกิดขึ้นถึง 2 GB ต่อแถวในเขตข้อมูลข้อความทั้งหมด จากมุมมองด้านประสิทธิภาพการจัดเก็บและอื่น ๆ เราควรตัดสินใจอย่างไรว่าจะใช้งานVARCHAR(MAX)หรือใช้SQL Server รุ่นใหม่ที่มีขนาดเฉพาะเจาะจงน้อยลง (เช่น 2008, 2012, 2014)

1
SQL Server แคชผลลัพธ์ของฟังก์ชันหลายค่าในตารางหรือไม่?
ฟังก์ชั่นมูลค่าตารางหลายงบส่งกลับผลลัพธ์ในตัวแปรตาราง ผลลัพธ์เหล่านี้เคยถูกนำมาใช้ซ้ำหรือฟังก์ชั่นจะถูกประเมินอย่างเต็มที่ทุกครั้งที่มีการเรียกใช้หรือไม่

1
แสวงหาและคุณจะสแกน ... บนตารางที่แบ่งพาร์ติชัน
ฉันได้อ่านบทความเหล่านี้ใน PCMag โดยItzik Ben-Gan : แสวงหาและคุณจะสแกนส่วนที่ 1: เมื่อเครื่องมือเพิ่มประสิทธิภาพไม่ได้ปรับให้เหมาะสม แสวงหาและคุณจะสแกนส่วนที่สอง: คีย์จากน้อยไปมาก ขณะนี้ฉันมีปัญหา "Grouped Max" กับตารางที่แบ่งพาร์ติชันทั้งหมดของเรา เราใช้เคล็ดลับ Itzik Ben-Gan ที่ให้ไว้เพื่อรับ max (ID) แต่บางครั้งก็ไม่ได้ทำงาน: DECLARE @MaxIDPartitionTable BIGINT SELECT @MaxIDPartitionTable = ISNULL(MAX(IDPartitionedTable), 0) FROM ( SELECT * FROM ( SELECT partition_number PartitionNumber FROM sys.partitions WHERE object_id = OBJECT_ID('fct.MyTable') AND index_id = 1 ) T1 …

1
เมื่อใดควรใช้ sort_in_tempdb เมื่อสร้างดัชนีใหม่
เรากำลังถกเถียงกันว่าจะใช้ตัวเลือก SORT_IN_TEMPDB สำหรับตาราง DW ของเราหรือไม่ ความเข้าใจของฉันคือว่ามีการเขียนเพิ่มเติมเมื่อใช้ตัวเลือกนี้แม้ว่าพวกเขาจะเรียงตามลำดับมากขึ้น เรามี SAN (ซึ่งช้ามากในบางครั้ง) ดังนั้นในกรณีของเราเราต้องการ จำกัด จำนวนการเขียนให้มากที่สุด ฉันเชื่อว่า tempdb อยู่ใน LUN แยกต่างหาก (ชุดของดิสก์) เรามีพื้นที่ดิสก์มากมายในไฟล์ข้อมูลและไฟล์ tempdb ของเรา ในกรณีนี้เราจะได้ประโยชน์จากการใช้ SORT_IN_TEMPDB ไหม สิ่งหนึ่งที่ทำให้ฉันรู้สึกแย่คือความเห็นต่อคำตอบนี้ เมื่อสร้างดัชนีใหม่คุณจะต้องมีพื้นที่ว่างสองเท่าของดัชนี + 20% สำหรับการเรียงลำดับ โดยทั่วไปแล้วการสร้างดัชนีทุกครั้งในฐานข้อมูลของคุณคุณต้องการเพียง 120% ของดัชนีที่ใหญ่ที่สุดในฐานข้อมูลของคุณ หากคุณใช้ SORT_IN_TEMPDB คุณจะได้รับเพียง 20% คุณยังคงต้องการ aditional 100% ในไฟล์ข้อมูลของคุณ ยิ่งไปกว่านั้นการใช้ sort in tempdb จะเพิ่มการโหลด IO ของคุณอย่างมากเนื่องจากแทนที่จะเขียนดัชนีหนึ่งครั้งไปยัง datafile ตอนนี้คุณเขียนมันหนึ่งครั้งไปยัง tempdb …

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