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

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

5
เมื่อใดควรจัดทำดัชนีที่ไม่เป็นคลัสเตอร์ในกลุ่มไฟล์แยกกัน
ฉันได้ยินมาว่าการจัดเก็บดัชนีในกลุ่มไฟล์และไดรฟ์เพิ่มประสิทธิภาพในฐานข้อมูลเนื่องจากไดรฟ์ไม่จำเป็นต้องย้อนกลับไปมาระหว่างดัชนีและข้อมูลที่ดัชนีอ้างอิง ฉันเคยได้ยินเช่นกันว่านี่เป็นตำนาน เมื่อใดควรเลือกที่จะจัดเก็บดัชนีที่ไม่ได้เป็นคลัสเตอร์ในกลุ่มไฟล์และไดรฟ์ที่แยกต่างหาก หลักฐานของ perfmon / profiler ใดที่ทำให้ฉันได้ข้อสรุปนั้น ฮาร์ดแวร์มีบทบาทในการตัดสินใจ (ไม่ว่าจะใช้ RAID / SAN บนไดรฟ์เดียวหรือไม่)
16 sql-server  index 

2
SQL Server 2008 - ดัชนีการแบ่งพาร์ติชันและคลัสเตอร์
ดังนั้นให้ฉันนำหน้าด้วยการบอกว่าฉันไม่สามารถควบคุมการออกแบบฐานข้อมูลของฉันได้ทั้งหมดดังนั้นแง่มุมมากมายของระบบปัจจุบันจึงไม่สามารถเปลี่ยนแปลงได้ตามวัตถุประสงค์ของสถานการณ์นี้ ความคิดเห็นเกี่ยวกับวิธีที่เราคิดใหม่แง่มุมของการออกแบบน่าจะถูกต้อง แต่ไม่ช่วยเหลือ :) ฉันมีตารางที่มีขนาดใหญ่มากกว้างประมาณ 150 ฟิลด์และแถวประมาณ 600 ม. ซึ่งขับเคลื่อนกระบวนการจำนวนมาก นี่คือสถานการณ์ในคลังข้อมูลดังนั้นเราจึงไม่มีการอัปเดต / แทรกใด ๆ นอกกระบวนการโหลดตามกำหนดเวลาดังนั้นจึงมีการจัดทำดัชนีอย่างหนัก มีการตัดสินใจที่จะลองแบ่งพาร์ติชันตารางนี้และฉันมีความกังวลเกี่ยวกับการทำดัชนีตารางที่แบ่งพาร์ติชัน ฉันไม่มีประสบการณ์ในการแบ่งพาร์ติชันดังนั้นอินพุตหรือลิงก์ใด ๆ ที่ชื่นชม ฉันไม่สามารถค้นหาสิ่งที่ฉันเป็นบน BOL หรือ msdn โดยเฉพาะได้ ขณะนี้เราจัดกลุ่มในฟิลด์ที่เราจะเรียกIncidentKeyซึ่งเป็นvarchar(50)และไม่ซ้ำกัน - เราสามารถมีได้ระหว่าง 1-100 รายการด้วยเหมือนกันIK(ไม่มีความคิดเห็นโปรด) เรามักจะได้รับข้อมูลใหม่ในIncidentKeyบันทึกเก่า ๆดังนั้นจึงไม่ต่อเนื่องกัน ฉันเข้าใจว่าฉันต้องรวมฟิลด์พาร์ติชันIncidentDateของฉันไว้ในคีย์ดัชนีคลัสเตอร์เพื่อให้พาร์ติชันทำงานได้อย่างถูกต้อง IncidentKey, IncidentDateฉันคิดว่ามันจะเป็น คำถามคือกลไกของดัชนีแบบคลัสเตอร์จะทำงานกับคีย์ 2 ส่วนในตารางที่แบ่งพาร์ติชันได้อย่างไรหากเร็กคอร์ดในพาร์ติชัน "ใหม่" ควรอยู่หน้าเร็กคอร์ดในพาร์ติชัน "เก่า" ในดัชนีคลัสเตอร์ ตัวอย่างเช่นฉันมี 5 บันทึก: IncidentKey Date ABC123 1/1/2010 ABC123 7/1/2010 …

7
การย้ายตารางไปยังฐานข้อมูล SQL2008 อื่น (รวมถึงดัชนีทริกเกอร์ ฯลฯ )
ฉันต้องการย้ายทั้งตาราง (100+) ของตารางขนาดใหญ่ (ล้านแถว) จากฐานข้อมูล SQL2008 หนึ่งไปยังอีก เดิมทีฉันเพิ่งใช้ตัวช่วยสร้างการนำเข้า / ส่งออก แต่ตารางปลายทางทั้งหมดไม่มีคีย์หลักและต่างประเทศดัชนีข้อ จำกัด ทริกเกอร์ ฯลฯ (คอลัมน์รหัสประจำตัวยังถูกแปลงเป็น INT ธรรมดาด้วย แต่ฉันคิดว่าฉันพลาดช่องทำเครื่องหมายใน วิซาร์ด.) วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร? หากนี่เป็นเพียงสองสามตารางฉันจะกลับไปที่แหล่งที่มาออกคำจำกัดความของตาราง (ที่มีดัชนีทั้งหมด ฯลฯ ) จากนั้นเรียกใช้ส่วนการสร้างดัชนีของสคริปต์บนปลายทาง แต่ด้วยตารางจำนวนมากดูเหมือนว่าจะเป็นไปไม่ได้ หากมีข้อมูลไม่มากฉันสามารถใช้วิซาร์ด "สร้างสคริปต์ ... " เพื่อสคริปท์แหล่งที่มารวมถึงข้อมูล แต่สคริปต์แถวขนาด 72 ม. ดูเหมือนจะไม่เป็นความคิดที่ดีเลย!

1
SQL Server 2016 Bad Query Plan ล็อคฐานข้อมูลสัปดาห์ละครั้ง
สัปดาห์ละครั้งในช่วง 5 สัปดาห์ที่ผ่านมาในช่วงเวลาเดียวกันของวัน (เช้าตรู่อาจขึ้นอยู่กับกิจกรรมของผู้ใช้เมื่อผู้คนเริ่มใช้งาน), SQL Server 2016 (AWS RDS, มิร์เรอร์) เริ่มจับเวลาจำนวนมาก คำสั่ง ปรับปรุงสถิติในตารางทั้งหมดแก้ไขได้ทันที หลังจากครั้งแรกฉันทำให้มันอัปเดตสถิติทั้งหมดในทุกตารางทุกคืน (แทนที่จะเป็นรายสัปดาห์) แต่มันยังคงเกิดขึ้น (ประมาณ 8 ชั่วโมงหลังจากสถิติการอัปเดตทำงาน แต่ไม่ใช่ทุกวันที่มันทำงาน) ครั้งล่าสุดที่ฉันเปิดใช้งาน Query Store เพื่อดูว่าฉันสามารถค้นหาแผนแบบสอบถาม / แบบสอบถามที่เฉพาะเจาะจงได้หรือไม่ ฉันคิดว่าฉันสามารถ จำกัด ให้แคบลงหนึ่ง: หลังจากค้นหาข้อความค้นหานั้นฉันได้เพิ่มดัชนีที่แนะนำซึ่งขาดหายไปจากแบบสอบถามที่ไม่ได้ใช้บ่อยครั้งนี้ แผนแบบสอบถามที่ไม่ถูกต้องกำลังทำการสแกนดัชนี (บนตารางที่มีแถว 10k เท่านั้น) แผนคิวรีอื่น ๆ ที่ส่งคืนหน่วยเป็นมิลลิวินาทีใช้ในการสแกนแบบเดียวกัน แผนแบบสอบถามใหม่ล่าสุดหลังจากสร้างดัชนีใหม่จะค้นหาเท่านั้น แต่ถึงแม้จะไม่มีดัชนีนั้นก็ 99% ของเวลา แต่มันกลับมาภายในเวลาไม่กี่มิลลิวินาที แต่จากนั้นทุกสัปดาห์จะใช้เวลา> 40 วินาที แย่มากที่หมดเวลา: http://brentozar.com/pastetheplan/?id=rymaWt56e แผนก่อนหน้าซึ่งไม่หมดเวลา: http://brentozar.com/pastetheplan/?id=HyN7ftcpe แผนใหม่ล่าสุดพร้อมดัชนีใหม่: …

3
วิธีการเขียนแบบสอบถามใน SQL Server เพื่อค้นหาค่าที่ใกล้ที่สุด
สมมติว่าฉันมีค่าจำนวนเต็มต่อไปนี้ในตาราง 32 11 15 123 55 54 23 43 44 44 56 23 ตกลงรายการสามารถดำเนินต่อไป; มันไม่สำคัญ ตอนนี้ฉันต้องการสืบค้นตารางนี้และฉันต้องการคืนค่าจำนวนclosest recordsหนึ่ง สมมติว่าฉันต้องการคืนการแข่งขันที่ใกล้เคียงที่สุด 10 รายการให้กับตัวเลข 32ฉันสามารถทำสิ่งนี้ได้อย่างมีประสิทธิภาพหรือไม่ มันอยู่ใน SQL Server 2014

1
การตั้งค่าการอนุญาตของผู้ใช้สำหรับสคีมา SQL Server ต่างๆ
ฉันจำเป็นต้อง จำกัด การเข้าถึงผู้ใช้เฉพาะ แต่พวกเขายังต้องสามารถดูข้อมูลในตารางที่ dbo เป็นเจ้าของได้ ฉันกำลังพยายามทำสิ่งต่อไปนี้: ฟังก์ชั่น dbo schema ตามปกติจะสามารถเข้าถึงทุกสิ่ง schema1 schema มีการเข้าถึงวัตถุ schema1 เท่านั้น ถ้ามุมมอง schema1 หรือกระบวนงานที่เก็บไว้เข้าถึงข้อมูลในตารางที่ dbo เป็นเจ้าของห่วงโซ่การอนุญาตอย่างเหมาะสม user1 มีสิทธิ์เข้าถึง schema1 และไม่มีอะไรอื่นอีก ยกเว้นในกรณีของ # 3 นี่คือสิ่งที่ฉันได้ลอง: สร้างผู้ใช้ user1 ที่แมปกับการเข้าสู่ระบบทดสอบด้วยรหัสผ่านแบบสุ่ม สร้างตารางคู่ใน dbo schema ด้วยข้อมูลการทดสอบบางอย่าง สร้างสคีมา 1 สร้าง schema1.get_profiles ที่เลือกจากมุมมองที่เรียกว่า schema1.profiles ซึ่งเข้าถึงข้อมูลใน dbo.people, dbo.taglinks และ dbo.tags อย่างไรก็ตามการใช้คำสั่งต่อไปนี้ในขณะที่เข้าสู่ระบบในฐานะผู้ใช้ 1: EXEC …

7
ขั้นตอนการจัดเก็บภายใต้การควบคุมแหล่งที่มาแนวปฏิบัติที่ดีที่สุด
ฉันกำลังใช้ Tortoise SVN เพื่อควบคุมแหล่งโปรแกรมประยุกต์บนเว็บ NET อะไรจะเป็นวิธีที่ดีที่สุดในการนำ SQL Server ของเรามาใช้ในการควบคุมกระบวนการ ขณะนี้ฉันใช้ VS 2010 เป็นสภาพแวดล้อมการพัฒนาของฉันและเชื่อมต่อกับฐานข้อมูล SQL Server 2008 R2 นอกสถานที่โดยใช้ SQL Server Data Tools (SSDT) สิ่งที่ฉันทำในอดีตคือการบันทึก procs เป็นไฟล์. sql และทำให้ไฟล์นี้อยู่ภายใต้การควบคุมของแหล่งที่มา ฉันแน่ใจว่าต้องมีวิธีที่มีประสิทธิภาพมากกว่านี้หรือไม่ มีส่วนขยายที่ฉันสามารถติดตั้งบน VS2010, SSDT หรือแม้แต่ SQL Server บนเครื่องที่ใช้งานจริงได้หรือไม่?

3
ฉันสามารถดึงวัตถุฐานข้อมูลทั้งหมดที่ผู้ใช้นั้นเป็นเจ้าของได้หรือไม่
เรามีผู้ใช้ที่กำลังออกจากและฉันจำเป็นต้องรู้ทุกวัตถุฐานข้อมูลที่เขาเป็นเจ้าของ มีแบบสอบถามที่จะให้ข้อมูลนี้หรือไม่?

2
การส่งคืนชุดผลลัพธ์ที่มีหลายแถวตามวันที่สูงสุด
ฉันมีตารางเด็กที่เป็นเช่นนี้: [ตารางวันที่ Cust] | Customer ID | Some Date | Balance | +-------------+------------+---------+ | 1 | 2012-04-30 | 20.00 | | 1 | 2012-03-31 | 50.00 | | 2 | 2012-04-30 | 0.00 | | 2 | 2012-03-31 | 10.00 | | 3 | 2012-03-31 | 60.00 | | 3 …
16 sql-server 

3
การเปรียบเทียบคอลัมน์ที่มี NULLS - มีวิธีที่สวยงามกว่านี้ไหม
ฉันรู้ว่าคุณไม่สามารถเปรียบเทียบค่ากับ NULL และคาดหวังผลลัพธ์โดยไม่ต้องเพิ่มบางอย่างในรหัสต่อไปนี้ ... SELECT * FROM A INNER JOIN B ON A.ID = B.ID WHERE A.STRING <> B.STRING OR (A.STRING IS NULL AND B.STRING IS NOT NULL) OR (A.STRING IS NOT NULL AND B.STRING IS NULL) OR A.DT <> B.DT OR (A.DT IS NULL AND B.DT IS NOT NULL) …
16 sql-server  null 

2
ตารางไม่ถูกสร้างภายใต้ dbo schema
เมื่อสร้างตารางใน SSMS ฉันรู้ว่าถ้าคุณรันคำสั่งต่อไปนี้: CREATE TABLE [tableName]; ตารางจะถูกสร้างภายใต้สคีมาของคุณเอง (ไม่ใช่ dbo) ดังนั้นเพื่อสร้างมันภายใต้สคี dbo คุณจะต้องพูดอย่างชัดเจนเช่นนี้: CREATE TABLE [dbo].[tableName]; ไม่มีใครรู้วิธี (เช่นการตั้งค่าทั้งเซิร์ฟเวอร์) เพื่อให้เมื่อมีการสร้างตารางส่วน [dbo] ไม่จำเป็นต้องระบุ

4
การซิงค์สองฐานข้อมูลใน SQL Server
ฉันมีฐานข้อมูล SQL Server สองฐาน หนึ่งคือไคลเอนต์ (โปรแกรมประยุกต์ของ Windows) และที่สองอยู่บนเซิร์ฟเวอร์ ฉันต้องการซิงค์ฐานข้อมูลทั้งสองนี้บ่อยๆ (เช่นทุก 2 นาที!) ฉันได้อ่านเกี่ยวกับวิธีการซิงค์ที่แตกต่างกันเช่นการจำลอง, การประทับเวลา, ตารางบันทึกการใช้ทริกเกอร์, Microsoft Sync Framework และอื่น ๆ ที่จริงฉันไม่ชอบใช้วิธีการซิงค์ซึ่งอาจเป็นกล่องดำ (เช่นการจำลองแบบ) เพราะฉันไม่ต้องการให้ตารางเฉพาะของ SQL Server ถูกบล็อกในขณะที่ฉันกำลังอัปเดตและซิงค์กับเซิร์ฟเวอร์ วิธีใดที่คุณคิดว่าฉันควรใช้ในกรณีเช่นนี้? โปรดจำไว้ว่าทุก ๆ นาทีฉันต้องส่งการเปลี่ยนแปลงตารางหลายครั้งจากไคลเอนต์ไปยังเซิร์ฟเวอร์และดึงข้อมูลการเปลี่ยนแปลงสองตารางจากเซิร์ฟเวอร์ ฉันได้พบวิธีการที่แปลก แต่ใหม่ เป็นไปได้หรือไม่ที่ฉันจะบันทึกขั้นตอนการดำเนินการที่จัดเก็บไว้ทั้งหมด (สำหรับที่ต้องการ) ในไคลเอนต์และส่งพารามิเตอร์ที่มีใน.sqlไฟล์ไปยังเซิร์ฟเวอร์และดำเนินการที่นั่น? จะเกิดขึ้นบนเซิร์ฟเวอร์และส่งไปยังลูกค้า คุณคิดว่านี่เป็นวิธีที่ง่าย แต่มีประโยชน์หรือไม่? โปรดแนะนำวิธีการที่มีประโยชน์หากคุณทำได้ ขอบคุณมาก. แก้ไข: โปรดจำไว้ว่านี่เป็นการซิงโครไนซ์แบบเรียลไทม์และทำให้มันพิเศษ หมายความว่าเมื่อผู้ใช้ไคลเอ็นต์กำลังใช้ตารางกระบวนการซิงโครไนซ์กับเซิร์ฟเวอร์จะต้องเกิดขึ้นทุก ๆ นาทีดังนั้นจึงไม่มีการล็อกตารางใด ๆ

2
รับเอาต์พุตโดยละเอียดของงาน SQL Agent
เรามีงานตัวแทนของเซิร์ฟเวอร์ SQL ที่รันแผนการบำรุงรักษาเพื่อทำดัชนีฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์อีกครั้ง เมื่อเร็ว ๆ นี้สิ่งนี้ล้มเหลว แต่ประวัติงานไม่ได้ให้ข้อมูลเพียงพอที่จะวินิจฉัยปัญหา ในประวัติงานมันระบุงานล้มเหลว ผู้ใช้งานถูกเรียกใช้โดย foo \ bar ขั้นตอนสุดท้ายในการรันคือขั้นตอนที่ 1 (สร้างดัชนีใหม่) ในหน้าต่างรายละเอียดมีหลายข้อความในแบบฟอร์มต่อไปนี้: Executing query "ALTER INDEX [something] ON [a...".: 0% complete End Progress Progress: 2015-03-15 22:51:23.67 Source: Rebuild Index Task คำสั่ง SQL ที่กำลังทำงานถูกตัดทอนและฉันจะสมมติว่าผลลัพธ์ของคำสั่งนั้นถูกตัดทอนด้วยทำให้ฉันไม่สามารถระบุได้ว่าคำสั่งใดที่ล้มเหลวและเพราะเหตุใด มีวิธีใดที่จะแยกข้อความทั้งหมดของข้อความเหล่านี้ออกหรือไม่

6
สคริปต์เพื่อดูการรันงานใน SQL Server ด้วยเวลาเริ่มงาน
วิธีการเขียนสคริปต์เพื่อดูงานใน SQL Server ที่มีเวลาเริ่มงาน? SELECT sj.name, sja.run_requested_date, CONVERT(VARCHAR(12), sja.stop_execution_date-sja.start_execution_date, 114) Duration FROM msdb.dbo.sysjobactivity sja INNER JOIN msdb.dbo.sysjobs sj ON sja.job_id = sj.job_id WHERE sja.run_requested_date IS NOT NULL ORDER BY sja.run_requested_date desc;

7
ฉันจะจัดการกับข้อ จำกัด FK เมื่อนำเข้าข้อมูลโดยใช้ตัวช่วยสร้างการนำเข้า / ส่งออก DTS ได้อย่างไร
ฉันพยายามใช้ตัวช่วยสร้างการนำเข้าและส่งออกเซิร์ฟเวอร์ SQL เพื่อคัดลอกข้อมูลจากฐานข้อมูลการผลิตของฉันไปยังฐานข้อมูล dev ของฉัน แต่เมื่อฉันทำมันล้มเหลวด้วยข้อผิดพลาด "การแทรก INSERT ขัดกับข้อ จำกัด ของต่างประเทศ" ฉันมีตารางมากกว่า 40 ตาราง ของข้อ จำกัด FK มีวิธีง่าย ๆ ในการจัดการกับสิ่งนี้โดยไม่ต้องเขียนข้อ จำกัด แบบหล่น / เพิ่มสคริปต์ constrat? แก้ไข: ฉันเพิ่งพบว่าในรุ่นของ SQL Server ซึ่งเป็นสิ่งที่ฉันกำลังทำงานอยู่ DTS จะไม่อนุญาตให้คุณบันทึกแพ็คเกจ

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