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

SQL Server 2008 (รุ่นบิลด์หลัก 10.00.xxxx) โปรดติดแท็กด้วย sql-server

2
วิธีการใช้ชุดรูปแบบกับ SQL Server Management Studio 2008
มีใครบ้างไหมที่ประสบความสำเร็จเช่นใช้ 'dark' กับองค์ประกอบ Text Editor ของ SSMS 2008 มีเคล็ดลับเก่าสำหรับปี 2005 ซึ่งไม่สามารถใช้งานได้อีกต่อไปและยังไม่ได้อัปเกรด http://winterdom.com/2007/10/colorschemesinsql2005managementstudio ดวงตาของฉันจะขอบคุณมาก! ไชโย

3
ทำไม Full Outer Join นี้ไม่ทำงาน?
ฉันเคยใช้ Full Outer Joins มาก่อนเพื่อให้ได้ผลลัพธ์ที่ต้องการ แต่บางทีฉันอาจไม่เข้าใจแนวคิดอย่างเต็มที่เพราะฉันไม่สามารถบรรลุสิ่งที่ควรเข้าร่วมอย่างง่าย ฉันมี 2 ตาราง (ซึ่งฉันจะเรียก t1 และ t2) โดยมี 2 ฟิลด์แต่ละฟิลด์: t1 Policy_Number Premium 101 15 102 7 103 10 108 25 111 3 T2 Policy_Number Loss 101 5 103 9 107 20 สิ่งที่ฉันพยายามทำคือรับผลรวมของพรีเมี่ยมและผลรวมของการสูญเสียจากทั้งสองตารางและ Policy_Number รหัสที่ฉันใช้คือ: select sum(premium) Prem_Sum, sum(Loss) Loss_Sum, t1.policynumber from t1 full …

3
ฉันจะรักษาค่าศูนย์นำหน้าได้อย่างไรเมื่อฉันใส่ตัวเลขลงในตารางนี้ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน8 ปีที่ผ่านมา ฉันได้แทรกสองระเบียนลงในตาราง create table num(id int) insert into num values(0023) insert into num values(23) select * from num 23เมื่อผมสอบถามพวกเขาพวกเขาทั้งหมดเป็นจอแสดงผล หมายความว่า SQL Server ละเว้น 0s ชั้นนำ กลไกเบื้องหลังคืออะไร ฉันจะให้ SQL Server คืนค่าตามที่ฉันแทรก (เช่น0023และ23) ได้อย่างไร

2
มีวิธีบังคับให้ดัชนีอยู่ในหน่วยความจำด้วย SQL Server 2008 หรือไม่?
ฉันมีตารางที่มีหลายล้านแถวซึ่งฉันต้องเรียกใช้แบบสอบถามบางครั้งบางคราว โดยทั่วไปการสืบค้นแรกจะค่อนข้างช้า (ประมาณ 10 วินาที) และการสืบค้นที่ตามมามักจะเร็วกว่า (ประมาณ 1 วินาที) หลังจากผ่านไปสองสามชั่วโมงวงจรที่ช้า / เร็วจะเริ่มขึ้นอีกครั้ง ฉันได้ตรวจสอบแผนการดำเนินการของฉันว่าดัชนีที่ต้องการทั้งหมดมีอยู่และใช้อย่างเหมาะสมและฉันถือว่าความแตกต่างของประสิทธิภาพนั้นเกิดจากข้อเท็จจริงที่ว่าดัชนีนั้นอยู่ในหน่วยความจำสำหรับการสืบค้นที่ตามมา (ฉันใช่หรือไม่ สาเหตุที่เป็นไปได้หรือไม่) ฉันยังใช้แบบสอบถามอื่น ๆ จำนวนมากโดยใช้ดัชนีเช่นกัน แต่แบบสอบถามเหล่านั้นใช้เวลาน้อยลงและประสิทธิภาพการทำงานนั้นสำคัญน้อยลงดังนั้นฉันจึงกังวลว่าดัชนีเหล่านั้นกำลังผลักดัชนีสำคัญออกจากแคชหน่วยความจำ นอกเหนือจากการแก้ไข 'เพิ่ม RAM เพิ่มเติม' ที่เห็นได้ชัดฉันยังคิดถึงการเขียนสคริปต์คิวรีเพื่อทำงานทุก ๆ ชั่วโมงเพื่อบังคับให้ดัชนีกลับมาอยู่ในหน่วยความจำ มีวิธีที่สง่างามกว่านี้หรือไม่? เช่นเดียวกับวิธีการบอกใบ้ SQLServer ว่าถ้ามันมีหน่วยความจำเพียงพอที่จะเก็บหนึ่งเดียวดัชนีแคชมันควรจะเป็นอย่างนั้น? ฉันรู้ว่าโดยปกติแล้วสิ่งที่ดีที่สุดคือการไม่ยุ่งกับ SQLServer ซึ่งเกี่ยวข้องกับสิ่งต่าง ๆ แต่ลักษณะที่ผิดปกติของข้อความค้นหาของฉัน (ทำงานน้อยมาก แต่ไม่ค่อยสำคัญเวลา) ทำให้ฉันเชื่อว่ามันสมเหตุสมผล . ฉันยังอยากรู้ว่าถ้ามีวิธีที่จะรู้ว่าดัชนีใดถูกแคชในหน่วยความจำในเวลาที่กำหนด?

2
ฟังก์ชั่นหน้าต่างทำให้เกิดแผนการดำเนินการที่น่ากลัวเมื่อถูกเรียกจากมุมมองที่มี parametrized ภายนอกโดยที่ 'clause
ฉันมีปัญหานี้มานานแล้วฉันพบวิธีแก้ปัญหาที่เหมาะกับฉันและลืมมันไป แต่ตอนนี้มีคำถามนั้นดังนั้นฉันยินดีที่จะทำให้ปัญหานี้เกิดขึ้น มีมุมมองที่รวมตารางบางอย่างในทางตรงไปตรงมามาก (คำสั่ง + คำสั่งซื้อ) เมื่อถูกสอบถามโดยไม่มีwhereประโยคมุมมองจะส่งกลับหลายล้านบรรทัด อย่างไรก็ตามไม่มีใครเคยเรียกมันว่าอย่างนั้น แบบสอบถามปกติคือ select * from that_nasty_view where order_number = 123456; สิ่งนี้จะส่งกลับประมาณ 10 ระเบียนจาก 5m สิ่งสำคัญ: มุมมองมีฟังก์ชั่นหน้าต่างrank()ซึ่งแบ่งพาร์ติชันตามฟิลด์โดยใช้มุมมองที่ถูกสอบถามเสมอ: rank() over (partition by order_number order by detail_line_number) ตอนนี้ถ้ามุมมองนี้ถูกสอบถามด้วยพารามิเตอร์ที่แท้จริงในสตริงแบบสอบถามตรงตามที่แสดงข้างต้นก็จะส่งกลับแถวทันที แผนการดำเนินการเป็นเรื่องปกติ: ดัชนีค้นหาทั้งสองตารางโดยใช้ดัชนีบนorder_number(ส่งคืน 10 แถว) การคำนวณหน้าต่างเหนือผลลัพธ์เล็ก ๆ ที่ส่งคืน การเลือก อย่างไรก็ตามเมื่อมีการเรียกใช้มุมมองในแบบที่กำหนดสิ่งต่าง ๆ น่ารังเกียจ: Index scanบนตารางทั้งหมดที่ละเว้นดัชนี ส่งคืนแถว 5 ม. เข้าร่วมมาก การคำนวณหน้าต่างทั้งหมดpartitions …

2
Shared Lock ออกเมื่อ IsolationLevel.ReadUncommitted
ฉันอ่านว่าถ้าฉันใช้ IsolationLevel.ReadUncommitted แบบสอบถามไม่ควรออกล็อคใด ๆ อย่างไรก็ตามเมื่อฉันทดสอบสิ่งนี้ฉันเห็นล็อคต่อไปนี้: Resource_Type: HOBT Request_Mode: S (แชร์แล้ว) ล็อค HOBT คืออะไร มีอะไรเกี่ยวข้องกับ HBT (ฮีปหรือล็อคแบบทรีไบนารี) ทำไมฉันยังคงได้ล็อค S ฉันจะหลีกเลี่ยงการล็อคที่ใช้ร่วมกันได้อย่างไรเมื่อทำการสอบถามโดยไม่เปิดตัวเลือกสแนปชอตระดับการแยก ฉันกำลังทดสอบสิ่งนี้ใน SQLServer 2008 และตัวเลือกสแนปชอตตั้งเป็นปิด แบบสอบถามจะทำการเลือกเท่านั้น ฉันเห็นว่าจำเป็นต้องใช้ Sch-S แม้ว่า SQL Server จะไม่แสดงในแบบสอบถามที่ล็อคอยู่ ทำไมมันถึงยังมีการล็อคที่ใช้ร่วมกันอยู่? ตาม: ระดับการแยกธุรกรรม SET (Transact-SQL) ธุรกรรมที่รันที่READ UNCOMMITTEDระดับจะไม่ออกการล็อกที่ใช้ร่วมกันเพื่อป้องกันไม่ให้ธุรกรรมอื่นแก้ไขข้อมูลที่อ่านโดยธุรกรรมปัจจุบัน ดังนั้นฉันสับสนเล็กน้อย

3
การบันทึกทุกการเปลี่ยนแปลงของแถวในฐานข้อมูลนั้นถูกเก็บไว้อย่างไร?
ในโครงการที่ฉันกำลังดำเนินการการเปลี่ยนแปลงแถวในบางตารางของฐานข้อมูลต้องถูกติดตามเพื่อการตรวจสอบเพิ่มเติมหรือย้อนกลับ มันจะต้องง่ายต่อการค้นหาผู้ที่แก้ไขแถวจากที่อยู่ IP และเวลาใดและสามารถกู้คืนเวอร์ชันก่อนหน้าได้ สิ่งที่คล้ายกันนั้นใช้โดย Stack Exchange เมื่อฉันเปลี่ยนคำถามของคนอื่นมันเป็นไปได้ที่จะพบว่าฉันเปลี่ยนมันและย้อนกลับการเปลี่ยนแปลง เทคนิคทั่วไปที่ใช้ในการจัดเก็บการเปลี่ยนแปลงทุกอย่างกับวัตถุในฐานข้อมูลคืออะไรเนื่องจากสคีมาปัจจุบันของฉันมีคุณสมบัติเหมือนกัน (ด้านล่าง) ส่วนใหญ่ที่เป็นแอปทางธุรกิจโดยเฉลี่ย วัตถุที่มีขนาดค่อนข้างเล็ก: อาจจะมีบางnvarchar(1000)ตัวอย่างเช่น แต่ไม่ blobs ใหญ่ของข้อมูลไบนารีหนึ่งนี้ถูกเก็บไว้โดยตรงบนดิสก์และเข้าถึงได้โดยตรงและไม่ผ่าน Microsoft SQL filestream, โหลดฐานข้อมูลค่อนข้างต่ำและฐานข้อมูลทั้งหมดได้รับการจัดการโดยเครื่องเสมือนหนึ่งเครื่องบนเซิร์ฟเวอร์ การเข้าถึงเวอร์ชันก่อนหน้าไม่จำเป็นต้องรวดเร็วเท่ากับการเข้าถึงเวอร์ชันล่าสุด แต่ยังต้องเป็นเวอร์ชันล่าสุดและไม่ช้าเกินไป² <TL-DR> ฉันคิดเกี่ยวกับกรณีต่อไปนี้ แต่ฉันไม่มีประสบการณ์จริงกับสถานการณ์เหล่านั้นดังนั้นฉันจะได้ยินความคิดเห็นของผู้อื่น: เก็บทุกอย่างไว้ในตารางเดียวกันโดยแยกแถวตาม ID และรุ่น IMO มันโง่มากและจะเจ็บไม่ช้าก็เร็วในระดับประสิทธิภาพ ด้วยวิธีนี้มันเป็นไปไม่ได้ที่จะตั้งระดับความปลอดภัยที่แตกต่างกันไปเป็นไอเท็มล่าสุดและการติดตามเวอร์ชั่น ในที่สุดทุกคำถามจะมีความซับซ้อนในการเขียน ที่จริงแล้วในการเข้าถึงข้อมูลที่ทันสมัยฉันจะถูกบังคับให้จัดกลุ่มทุกอย่างด้วยรหัสและดึงข้อมูลในแต่ละกลุ่มเวอร์ชันสุดท้าย เก็บเวอร์ชันล่าสุดไว้ในตารางเดียวและในทุก ๆ การเปลี่ยนแปลงให้คัดลอกเวอร์ชันที่ล้าสมัยไปยังตารางอื่นในสคีมาอื่น ข้อบกพร่องคือทุกครั้งที่เราเก็บทุกค่าแม้ว่ามันจะไม่เปลี่ยนแปลง การตั้งค่าการเปลี่ยนแปลงที่จะnullไม่ได้เป็นวิธีการแก้ปัญหาตั้งแต่ฉันยังต้องติดตามเมื่อค่าที่มีการเปลี่ยนแปลงไปหรือจากnullnull เก็บเวอร์ชันล่าสุดไว้ในตารางเดียวและรายการคุณสมบัติที่เปลี่ยนแปลงด้วยค่าก่อนหน้าในตารางอื่น นี้ดูเหมือนว่ามีสองข้อบกพร่อง: binary(max)หนึ่งที่สำคัญที่สุดคือว่าวิธีเดียวที่จะเรียงลำดับประเภทที่แตกต่างกันของค่าก่อนหน้านี้ในคอลัมน์เดียวกันคือการมี อย่างที่สองคือฉันเชื่อว่ามันจะยากกว่าที่จะใช้โครงสร้างดังกล่าวเมื่อแสดงเวอร์ชันก่อนหน้าแก่ผู้ใช้ ทำสิ่งเดียวกันกับในสองประเด็นก่อนหน้านี้ แต่เก็บรุ่นไว้ในฐานข้อมูลแยกต่างหาก ประสิทธิภาพอาจเป็นเรื่องที่น่าสนใจเพื่อหลีกเลี่ยงการชะลอการเข้าถึงเวอร์ชันล่าสุดโดยให้มีเวอร์ชันก่อนหน้าในฐานข้อมูลเดียวกัน ยังฉันเชื่อว่ามันเป็นการเพิ่มประสิทธิภาพก่อนวัยอันควรและจะต้องทำก็ต่อเมื่อมีหลักฐานที่แสดงว่ารุ่นเก่าและรุ่นล่าสุดในฐานข้อมูลเดียวกันเป็นคอขวด </ TL-DR> ¹ตัวอย่างเช่นจะไม่สามารถจัดเก็บการเปลี่ยนแปลงลงในไฟล์บันทึกได้เนื่องจากจะทำเพื่อบันทึก HTTP …

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

2
ฉันจะล้างตารางจากแคชของ SQL Server ได้อย่างไร
ฉันมีตารางไม่กี่ตารางในฐานข้อมูลของฉันที่ไม่ควรแคช ฉันจะบอก SQL Server ไม่ให้แคชเพจของตารางหรือฉันจะล้างตารางเดียวจากแคชได้อย่างไร การล้างแคชทั้งหมดไม่ใช่ตัวเลือก ฉันใช้ SQL Server 2008 และ SQL Server 2008 R2

2
DTA แนะนำให้สร้างสถิติ
ฉันเพิ่งรัน T-SQL เคียวรีผ่าน DTA และหนึ่งในคำแนะนำคือการสร้างสถิติบนหนึ่งในคอลัมน์ที่เป็นส่วนหนึ่งของแบบสอบถามจำนวนมากในไฟล์รหัส SQL คำถามของฉันคือสถิติช่วยในเรื่องประสิทธิภาพได้อย่างไร

3
บันทึกธุรกรรมจะลดขนาดโดยอัตโนมัติใน SQL Server หรือไม่
เมื่อฐานข้อมูล SQL Server ในโหมด SIMPLE คุณไม่ต้องสนใจเกี่ยวกับ bakcups บันทึกธุรกรรม แต่ในโหมด SIMPLE บันทึกธุรกรรมดูเหมือนว่าจะเพิ่มขึ้นเช่นเดียวกับในโหมดเต็ม มีการตัดทอนอัตโนมัติในบางช่วงเวลาหรือไม่? หรือฉันต้องตัดทอน / ย่อขนาดด้วยตนเองหรือไม่?

1
สถิติการอัปเดตอัตโนมัติใน SQL Server 2008R2: ทำไมบางสถิติยังคงค้างแม้ว่าจะมีการแทรกแถวจำนวนมาก
ในระหว่างการตรวจสอบแบบสอบถามที่ช้านั้นปรากฏว่าแผนการดำเนินการนั้นไม่ดีเท่าที่ควร เมื่อยืนยันแล้วว่ามีสถิติที่เกี่ยวข้องซึ่งจริง ๆ แล้วล้าสมัยฉันได้สร้างสถิติขึ้นมาใหม่และปัญหาประสิทธิภาพได้รับการแก้ไขอย่างมีประสิทธิภาพ ฐานข้อมูลนี้เปิดใช้งานสถิติการอัพเดทอัตโนมัติ (โดยค่าเริ่มต้น) ฉันเข้าใจว่ามีเกณฑ์สำหรับการอัปเดตสถิติอัตโนมัติโดยพิจารณาจากการแก้ไขแถว 20% + 500 (อัปเดต / แทรก / ลบ) เกณฑ์นี้ดูเหมือนจะเกินกว่าระดับสูงของดัชนีหลายรายการเช่นนั้นปรากฏว่ามี (A) ปัญหาเกี่ยวกับการอัปเดตอัตโนมัติหรือ (B) มีกลยุทธ์การอัปเดตมากกว่าที่ฉันพบได้ในออนไลน์ เอกสาร ฉันซาบซึ้งที่งานที่กำหนดเวลาไว้สามารถตั้งค่าเพื่ออัปเดตสถิติและนี่น่าจะเป็นแนวทางที่เราใช้หากไม่พบวิธีแก้ไขปัญหาอื่น ๆ อัปเดตอัตโนมัติสำหรับสถิติบางอย่าง - ทำความเข้าใจว่าทำไมอาจช่วยเราในการตัดสินใจว่าจะต้องอัปเดตสถิติใดโดยภารกิจที่กำหนดเวลาไว้ หมายเหตุเพิ่มเติมบางส่วน: 1) ปัญหาถูกบันทึกไว้ในฐานข้อมูลที่ข้อมูลถูกสร้างขึ้นโดยการทดสอบโหลดและเนื่องจากมีการเพิ่มข้อมูลจำนวนมากในช่วงเวลาสั้น ๆ ดังนั้นหากการอัปเดตอัตโนมัติเกิดขึ้นเป็นระยะ ๆ (เช่นวันละครั้งที่ ส่วนใหญ่) สิ่งนี้อาจอธิบายพฤติกรรมที่สังเกตได้บางอย่าง นอกจากนี้การทดสอบโหลดของเรามักจะเน้นที่ฐานข้อมูลอย่างหนักดังนั้นฉันสงสัยว่า SQL จะชะลอการอัปเดตสถิติขณะที่มีการโหลดจำนวนมากหรือไม่และไม่อัปเดตสถิติด้วยเหตุผลบางประการ 2) ในการพยายามสร้างปัญหานี้อีกครั้งด้วยสคริปต์ทดสอบที่มี INSERT ต่อเนื่องคำสั่ง SELECT และ DELETE จะไม่เกิดปัญหาขึ้น ฉันสงสัยว่าความแตกต่างที่นี่เป็นที่งบเหล่านี้แต่ละคนมีผลต่อแถวจำนวนมากต่อคำสั่ง SQL ในขณะที่สคริปต์ทดสอบโหลดของเราจะมีแนวโน้มที่จะแทรกแถวเป็นรายบุคคล 3) …

4
วิธีที่ดีที่สุดในการตรวจสอบแบบสอบถามที่ใช้เวลานานใน SQL Server คืออะไร
ฉันต้องเรียกใช้คิวรีที่ใช้เวลานาน (สร้างดัชนีใหม่อัปเดตชุดข้อมูลขนาดใหญ่) สำหรับฐานข้อมูลของฉัน มีทางเลือกอื่นในการเรียกใช้แบบสอบถามใน SQL Server Management Studio และตรวจสอบทุกชั่วโมงหรือไม่ ฉันต้องการส่งอีเมลหรือส่งข้อความเมื่อเสร็จสิ้น แต่ไม่ทราบว่าเป็นเครื่องมือที่ดีที่สุดสำหรับสิ่งนี้

4
เพิ่มประสิทธิภาพการเข้าร่วมบนโต๊ะขนาดใหญ่
ฉันพยายามเกลี้ยกล่อมให้มีประสิทธิภาพมากขึ้นจากการสืบค้นที่เข้าถึงตารางที่มีระเบียน ~ 250 ล้านรายการ จากการอ่านแผนปฏิบัติการจริง (ไม่ได้ประเมิน) ของฉันคอขวดแรกคือแบบสอบถามที่มีลักษณะดังนี้: select b.stuff, a.added, a.value from dbo.hugetable a inner join #smalltable b on a.fk = b.pk where a.added between @start and @end; ดูเพิ่มเติมสำหรับคำจำกัดความของตารางและดัชนีที่เกี่ยวข้อง แผนการดำเนินการบ่งชี้ว่ามีการใช้ลูปที่ซ้อนกันบน #smalltable และดัชนีการสแกนผ่าน hugetable กำลังดำเนินการ 480 ครั้ง (สำหรับแต่ละแถวใน #smalltable) สิ่งนี้ดูเหมือนจะย้อนกลับมาที่ฉันดังนั้นฉันจึงพยายามบังคับให้รวมการผสานเพื่อใช้แทน: select b.stuff, a.added, a.value from dbo.hugetable a with(index = ix_hugetable) inner …

1
การทำมิเรอร์ฐานข้อมูลด้วย TDE
ฉันมีความต้องการในการทำมิเรอร์ฐานข้อมูลบางส่วนและใช้การเข้ารหัสข้อมูลแบบโปร่งใส (TDE) กับพวกเขาเนื่องจากข้อมูลของเราจะต้องถูกเข้ารหัสขณะที่ 'พัก' ฉันมีการติดตั้ง TDE ทั้งตัวการและตัวสะท้อน ปัญหาที่ฉันเกิดขึ้นเมื่อฉันตั้งค่าการทำมิเรอร์ของฐานข้อมูลทั้งสอง ตั้งแต่ฉันใช้ TDE ฉันไม่รู้วิธีตั้งค่าการมิเรอร์ผ่าน gui ดังนั้นฉันถูกบังคับให้ใช้ t-sql เพื่อให้งานเสร็จ ด้านล่างเป็นรหัสที่ฉันใช้กับเซิร์ฟเวอร์ที่ทำมิเรอร์ --Restore the full backup to the mirrored mdf and ldf OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password' RESTORE DATABASE TDE FROM disk = '\\SERVERNAME\SQL_Stuff\Backup\TDE_FULL.bak' WITH NORECOVERY, REPLACE, MOVE 'TDE' TO 'E:\TDE.mdf', REPLACE, MOVE …

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