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

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

6
การสำรองข้อมูลที่น้อยที่สุดทำได้ ... ด้วย SQL Server
ทุกวันเราจัดส่งข้อมูลสำรอง SQL Server ของเราทั่วทั้ง WAN เราจำเป็นต้องลดขนาดของการสำรองข้อมูลเหล่านี้เพื่อไม่ให้ใช้งานได้ตลอดไป เราไม่รังเกียจหากกระบวนการสำรองข้อมูลของเราใช้เวลานานขึ้น เนื่องจากเราจำเป็นต้องย้ายการสำรองข้อมูลที่บีบอัด 30 กรัมข้าม WAN ที่ใช้เวลานานกว่า 10 ชั่วโมง มี 2 ​​ตัวเลือกที่เราจะต้องได้รับการสำรองข้อมูลรายวันขนาดเล็ก บันทึกการจัดส่งซึ่งหมายความว่าเราจะต้องปรับโครงสร้างกระบวนการ DR ดึงข้อมูลออกจาก db และสร้างใหม่อีกด้านหนึ่ง (ดร็อปดัชนีที่ไม่ใช่คลัสเตอร์แพ็คดัชนีคลัสเตอร์ที่ 100% - สร้างใหม่อีกด้านหนึ่ง) ทั้งสองจะเกี่ยวข้องกับปริมาณงานที่เป็นธรรมจากส่วนของเรา เราใช้ SQL Server 2008 pro การสำรองข้อมูลทั้งหมดจะถูกบีบอัด มีผลิตภัณฑ์เชิงพาณิชย์ใดบ้างที่สามารถให้ตัวเลือกสำรองขนาดใกล้เคียงกันกับตัวเลือก (2) มีสคริปต์ที่ครอบคลุมที่จะช่วยให้เราสามารถบรรลุ (2)? (การจัดการมุมมองที่จัดทำดัชนีดัชนีกรองคีย์ต่างประเทศและอื่น ๆ )

4
ฉันจะแสดงรายการหรือค้นหาชื่อคอลัมน์ทั้งหมดในฐานข้อมูลของฉันได้อย่างไร
ฉันต้องการค้นหาสตริงในชื่อคอลัมน์ที่มีอยู่ในฐานข้อมูล ฉันกำลังทำงานในโครงการบำรุงรักษาและฐานข้อมูลบางส่วนที่ฉันจัดการมีมากกว่า 150 ตารางดังนั้นฉันกำลังมองหาวิธีที่รวดเร็วในการทำเช่นนี้ คุณแนะนำเมนูใด?

10
ฉันจะติดตามการพึ่งพาฐานข้อมูลได้อย่างไร
เมื่อแอปพลิเคชันภายในมีวิวัฒนาการมานานหลายปีคุณอาจพบว่ามีตารางจำนวนมากที่ผู้คนเชื่อว่าไม่มีความเกี่ยวข้องกันอีกต่อไปและต้องการเลือกสรร อะไรคือวิธีปฏิบัติในการระบุการพึ่งพาฐานข้อมูลทั้งภายในสภาพแวดล้อม SQL และอาจเป็นต้นไปสู่สิ่งต่าง ๆ เช่น SSIS ฉันเคยทำงานในที่ที่มีการใช้ตัวเลือกที่โหดร้ายเช่น: ปล่อยก่อนถามคำถามในภายหลัง (สามารถฆ่าการสร้างคลังข้อมูลถ้าพยายามแยกตารางที่ไม่มีอยู่อีกต่อไป) ลบการอนุญาตก่อนและรอการรายงานข้อผิดพลาด (อาจทำให้เกิดข้อบกพร่องเงียบหากความล้มเหลวไม่ได้จัดการอย่างถูกต้อง) ฉันขอขอบคุณที่ SQL Server มาพร้อมกับเครื่องมือสำหรับการติดตามการอ้างอิงภายในอินสแตนซ์นั้น แต่สิ่งเหล่านี้ดูเหมือนจะลำบากถ้าคุณมีฐานข้อมูลในอินสแตนซ์ที่ต่างกัน มีตัวเลือกที่ช่วยให้ค้นหาข้อความอ้างอิงได้ง่ายขึ้นหรืออาจตอบคำถามเช่น "คอลัมน์นี้ใช้ที่ไหน" กับคำตอบเช่น "บนเซิร์ฟเวอร์อื่น ๆ ในขั้นตอนการจัดเก็บนี้" หรือ "มากกว่าในแพ็คเกจ SSIS นี้"?

2
เหตุใดการใช้ตัวแปรตารางจึงเร็วกว่าตาราง #temp มากกว่าสองเท่าในกรณีเฉพาะนี้
ฉันอ่านบทความที่นี่ Temporary Tables vs. Variables Table และผลกระทบต่อประสิทธิภาพของ SQL Serverและ SQL Server 2008 ก็สามารถสร้างผลลัพธ์ที่คล้ายกันกับผลลัพธ์ที่แสดงในปี 2005 เมื่อดำเนินการตามขั้นตอนที่เก็บไว้ (คำจำกัดความด้านล่าง) โดยมีเพียง 10 แถวรุ่นตัวแปรตารางจะดำเนินการเวอร์ชันตารางชั่วคราวมากกว่าสองครั้ง ฉันเคลียร์แคชโพรซีเดอร์และรันทั้งโพรซีเดอร์ที่เก็บไว้ 10,000 ครั้งจากนั้นทำซ้ำกระบวนการสำหรับการรันอีก 4 ครั้ง ผลลัพธ์ด้านล่าง (เวลาเป็น ms ต่อชุด) T2_Time V2_Time ----------- ----------- 8578 2718 6641 2781 6469 2813 6766 2797 6156 2719 คำถามของฉันคือเหตุผลที่ทำให้ประสิทธิภาพที่ดีขึ้นของรุ่นตัวแปรตารางคืออะไร? ฉันได้ทำการสอบสวนแล้ว เช่นการดูเคาน์เตอร์วัดประสิทธิภาพด้วย SELECT cntr_value from sys.dm_os_performance_counters where …

2
Outer Apply vs Left Join Performance
ฉันใช้ SQL Server 2008 R2 ฉันเพิ่งเจอ APPLY ใน SQL และชอบที่จะแก้ปัญหาการสืบค้นสำหรับหลาย ๆ กรณี ตารางจำนวนมากที่ฉันใช้ 2 left join เพื่อให้ได้ผลลัพธ์ฉันสามารถสมัครนอก 1 ครั้งได้ ฉันมีข้อมูลจำนวนเล็กน้อยในตารางฐานข้อมูลท้องถิ่นของฉันและหลังจากการปรับใช้รหัสควรทำงานบนข้อมูลอย่างน้อย 20 ครั้งใหญ่ ฉันกังวลว่าการใช้งานภายนอกอาจใช้เวลานานกว่าเงื่อนไขการเข้าร่วม 2 ด้านซ้ายสำหรับข้อมูลจำนวนมาก ทุกคนสามารถบอกได้ว่าการนำไปใช้งานได้อย่างไรและจะส่งผลต่อประสิทธิภาพการทำงานอย่างไรในข้อมูลที่มีขนาดใหญ่มากถ้าเป็นไปได้ความสัมพันธ์เชิงสัดส่วนกับขนาดของแต่ละตารางเช่นสัดส่วนกับ n1 ^ 1 หรือ n1 ^ 2 ... โดยที่ n1 คือจำนวนแถวในตาราง 1 นี่คือแบบสอบถามที่มี 2 ซ้ายเข้าร่วม select EC.*,DPD.* from Table1 eC left join ( select …

1
คุณสร้างมุมมองด้วย SNAPSHOT_MATERIALIZATION ใน SQL Server 2017 ได้อย่างไร
SQL Server 2017 มีขั้นตอนการจัดเก็บใหม่สองสามขั้นตอน: sp_refresh_single_snapshot_view - พารามิเตอร์การป้อนข้อมูลสำหรับ @view_name nvarchar (261), @rgCode int sp_refresh_snapshot_views - พารามิเตอร์ขาเข้าสำหรับ @rgCode int และรายการใหม่ใน sys.messages: 10149 - ดัชนีที่มี SNAPSHOT_MATERIALIZATION ไม่สามารถสร้างได้ในมุมมอง '%. * ls' เนื่องจากคำจำกัดความการดูประกอบด้วยตารางที่ปรับให้เหมาะสมกับหน่วยความจำ 10642 - SNAPSHOT_MATERIALIZATION ไม่สามารถตั้งค่าสำหรับดัชนี '%. * ls' บน '%. * ls' เนื่องจากใช้กับดัชนีในมุมมองเท่านั้น 10643 - SNAPSHOT_MATERIALIZATION ไม่สามารถตั้งค่าสำหรับ '%. * ls' บน '%. * …

5
เมื่อแบบสอบถาม SQL ที่เร็วกว่าเดิมเริ่มทำงานช้าฉันจะค้นหาแหล่งที่มาของปัญหาได้ที่ไหน
พื้นหลัง ฉันมีแบบสอบถามที่ใช้กับ SQL Server 2008 R2 ที่รวมและ / หรือซ้ายเข้าร่วมกับ "ตาราง" ที่แตกต่างกันประมาณ 12 รายการ ฐานข้อมูลมีขนาดค่อนข้างใหญ่โดยมีตารางมากกว่า 50 ล้านแถวและประมาณ 300 ตารางที่แตกต่างกัน สำหรับ บริษัท ขนาดใหญ่ที่มีคลังสินค้า 10 แห่งทั่วประเทศ คลังสินค้าทั้งหมดอ่านและเขียนไปยังฐานข้อมูล ดังนั้นมันจึงค่อนข้างใหญ่และค่อนข้างยุ่ง ข้อความค้นหาที่ฉันพบมีลักษณะดังนี้: select t1.something, t2.something, etc. from Table1 t1 inner join Table2 t2 on t1.id = t2.t1id left outer join (select * from table 3) t3 …

2
เหตุใดลำดับ Denali จึงควรทำงานได้ดีกว่าคอลัมน์ข้อมูลประจำตัว
ในคำตอบของเขาที่จะดีกว่า: คอลัมน์ข้อมูลประจำตัวหรือสร้างค่ารหัสที่ไม่ซ้ำกัน? mrdenny พูดว่า: เมื่อ SQL Denali ออกมามันจะสนับสนุนลำดับซึ่งจะมีประสิทธิภาพมากกว่าเอกลักษณ์ แต่คุณไม่สามารถสร้างสิ่งที่มีประสิทธิภาพมากขึ้นด้วยตัวคุณเอง ผมไม่แน่ใจ. เมื่อทราบลำดับของ Oracle ฉันต้องสร้างทริกเกอร์สำหรับแทรกใส่แค็ปซูลแต่ละอันไว้ในการเรียกโพรซีเดอร์ที่เก็บไว้หรือภาวนาว่าฉันไม่ลืมที่จะใช้ลำดับเมื่อฉันแทรกโฆษณาแบบเฉพาะกิจ ฉันสงสัยว่าข้อดีของลำดับนั้นชัดเจนมาก

5
เหตุใดข้อ จำกัด UNIQUE จึงอนุญาตให้ NULL เพียงหนึ่งอันเท่านั้น
ในทางเทคนิค NULL = NULL เป็นเท็จโดยตรรกะนั้น NULL จะเท่ากับ NULL ใด ๆ และ NULL ทั้งหมดนั้นแตกต่างกัน นี่ไม่ควรบอกเป็นนัยเลยว่า NULL ทั้งหมดนั้นไม่เหมือนใครและดัชนีที่ไม่ซ้ำกันควรอนุญาตให้มี NULL จำนวนเท่าใด?

5
เหตุใด SQL Server จึงใช้หน่วยความจำเซิร์ฟเวอร์มากขึ้น
SQL Server บริโภค 87.5% ของ RAM เซิร์ฟเวอร์ของฉัน เมื่อเร็ว ๆ นี้ทำให้เกิดปัญหาคอขวดของประสิทธิภาพเช่นความช้า ฉันค้นคว้าปัญหานี้แล้ว ทางออกหนึ่งที่พบได้ทั่วไปบนอินเทอร์เน็ตคือการกำหนดขีด จำกัด สูงสุดของ SQL Server สิ่งนี้ทำและได้รับการปรับปรุงมาก ฉันต้องการทราบว่าทำไมหากไม่ได้ตั้งค่าหน่วยความจำสูงสุดว่าทำไม SQL Server ยังคงใช้ทรัพยากรต่อไป

5
ทำไมถึงมีประเภทข้อมูล varchar อยู่?
ฐานข้อมูลของฉันหลายแห่งมีเขตข้อมูลที่กำหนดเป็น varchars นี่ไม่ได้เป็นปัญหามากนักตั้งแต่ฉันอาศัยและทำงานในอเมริกา (ภาษาเดียวที่มีอยู่คือ "อเมริกัน" อะแฮ่ม ) หลังจากทำงานกับฐานข้อมูลประมาณ 5 ปีฉันก็พบว่าในที่สุดฉันก็พบปัญหาเกี่ยวกับลักษณะที่ จำกัด ของเขตข้อมูล varchar และฉันต้องแก้ไขเขตข้อมูลของฉันเพื่อเก็บข้อมูลเป็น nvarchars หลังจากต้องทำการอัปเดตอีกครั้งในตารางการแปลงเขตข้อมูล varchar เป็น nvarchar ฉันเพิ่งคิดว่า - ทำไมเรายังคงทำเช่นนี้อยู่ ฉันตัดสินใจที่จะกำหนดเขตข้อมูลใหม่ทั้งหมดของฉันเป็น nvarchar แทน varchar ซึ่งเป็นสิ่งที่ฉันเรียนรู้ที่จะทำจากหนังสือเรียนเมื่อตอนที่ฉันอยู่โรงเรียนเมื่อ 10 ปีที่แล้ว ในปี 2554 และมี SQL Server รุ่นใหม่เมื่อปีที่แล้ว ทำไมเรายังคงสนับสนุนประเภทข้อมูล varchar เมื่อเราสามารถ / ควรใช้ nvarchar แทน? ฉันรู้ว่ามันมักจะเป็นที่ถกเถียงกันอยู่ว่า nvarchars เป็น "ใหญ่เป็นสองเท่า" เป็น varchars ดังนั้นการใช้พื้นที่เก็บข้อมูลอาจเป็นหนึ่งในการโต้แย้งสำหรับ maitaining …

1
SQL Server: วิธีการติดตามความคืบหน้าของคำสั่ง CREATE INDEX?
SQL Server 2014, Std Ed ฉันได้อ่านว่า percent_complete ใน dm_exec_requests ใช้ไม่ได้กับ CREATE INDEX และในทางปฏิบัติแล้ว percent_complete sticks ที่ 0 ดังนั้นมันจึงไม่ช่วย ปัจจุบันฉันใช้วิธีการด้านล่างซึ่งอย่างน้อยก็แสดงให้ฉันเห็นการเคลื่อนไหว (ว่าการสร้างดัชนีไม่ได้ถูกบล็อก) แต่ฉันไม่มีความคิดถ้าฉัน% 10 ผ่านกระบวนการหรือ% 99 ฉันลองวิธีที่อธิบายไว้ที่นี่: https://dba.stackexchange.com/a/102545/6229 แต่มันแสดงให้เห็นว่าเวลาเสร็จสิ้นอย่างชัดเจนผิดปกติ (โดยทั่วไปจะแสดง 'ตอนนี้' เป็นเวลา 60 นาทีซึ่งฉันใช้เวลา 10 นาที ) ฉันจะได้รับเบาะแสได้อย่างไร SELECT percent_complete, estimated_completion_time, reads, writes, logical_reads, text_size, * FROM sys.dm_exec_requests AS r WHERE r.session_id …

2
ใน SQL Server วัตถุประสงค์ของการจัดกลุ่มกระบวนงานที่เก็บไว้คืออะไร
หนึ่งในปัญหาที่น่างงที่สุดที่ฉันต้องจัดการกับกลุ่ม Stored Procedure ได้รับการจัดเก็บusp_DoSomethingAwesomeผมสามารถสร้าง proc usp_DoSomethingAwesome;2ในกลุ่มอีกว่าโดยเรียกมันว่า ฉันค้นพบสิ่งนี้เมื่อแก้ไขปัญหาการจำลองแบบบางอย่าง (ผู้เผยแพร่: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.) ที่เกิดขึ้นกับขั้นตอนการแทรกการปรับปรุงและการจำลองแบบที่สร้างโดยระบบ อะไรคือจุดประสงค์ / ความคิดเบื้องหลังการมีความสามารถ "การจัดกลุ่ม" นี้?

2
ถ้ามีอยู่ใช้เวลานานกว่าคำสั่ง select ฝังตัว
เมื่อฉันเรียกใช้รหัสต่อไปนี้มันใช้เวลา 22.5 นาทีและ 106 ล้านอ่าน อย่างไรก็ตามถ้าฉันเรียกใช้เพียงคำสั่งเลือกภายในด้วยตัวเองมันใช้เวลาเพียง 15 วินาทีและอ่านได้ 264k ในฐานะที่เป็นข้อความด้านแบบสอบถามแบบใช้เลือกข้อมูลจะไม่ส่งกลับระเบียน ความคิดใดที่ว่าทำไมIF EXISTSมันถึงทำให้มันใช้งานได้นานขึ้นและอ่านได้มากขึ้น? ฉันเปลี่ยนคำสั่ง select เป็นสิ่งที่ต้องทำSELECT TOP 1 [dlc].[id]และฉันก็ฆ่ามันหลังจาก 2 นาที ในฐานะที่เป็นแก้ไขชั่วคราวฉันมีการเปลี่ยนแปลงจะทำนับ (*) @cntและกำหนดค่าที่ให้กับตัวแปร จากนั้นจะมีIF 0 <> @cntคำสั่ง แต่ฉันคิดว่าEXISTSจะดีกว่าเพราะถ้ามีการบันทึกกลับมาในคำสั่ง select มันจะหยุดทำการสแกน / ค้นหาเมื่อพบอย่างน้อยหนึ่งระเบียนในขณะที่count(*)จะทำการสืบค้นแบบเต็ม ฉันพลาดอะไรไป IF EXISTS (SELECT [dlc].[ID] FROM TableDLC [dlc] JOIN TableD [d] ON [d].[ID] = [dlc].[ID] JOIN TableC [c] …

2
วิธีที่ดีที่สุดในการแทรกข้อมูลประจำตัวสุดท้ายในตาราง
ตัวเลือกใดเป็นตัวเลือกที่ดีที่สุดในการรับค่าตัวตนที่ฉันเพิ่งสร้างผ่านการแทรก อะไรคือผลกระทบของแถลงการณ์เหล่านี้ในแง่ของประสิทธิภาพ? SCOPE_IDENTITY() ฟังก์ชันการรวม MAX() SELECT TOP 1IdentityColumn จาก TableNameORDER BY IdentityColumn DESC

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