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

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

1
เหตุใดแบบสอบถาม SQL Server จึงไม่ใช้ดิสก์ I / O มากกว่า 7MB / วินาที
ฉันมี SSD ที่ใช้การทดสอบ IOmeter แสดงประสิทธิภาพมากกว่า 200MB / s อย่างไรก็ตามเมื่อฉันเรียกใช้แบบสอบถาม SQL ใด ๆ จากเครื่องท้องถิ่นการตรวจสอบทรัพยากร windows ไม่เคยแสดงดิสก์ IO เหนือ 7MB / วินาที สิ่งนี้ถือเป็นจริงแม้กระทั่งการสืบค้นที่ใช้เวลานานกว่า 2 นาที สิ่งที่เป็นปัญหาคอขวดคือการใช้เพียง 7MB / วินาทีจาก SSD? ฉันกำลังวิ่ง: มาตรฐาน Windows Server 2012 SQL Server 2008 r2 Intel i7 3820 หน่วยความจำ 32GB sandisk SSD

1
การจำลองแบบ SQL Server Snapshot ทำสำเนาข้อมูลทุกครั้งหรือไม่
ฉันกำลังดูการจำลองแบบภาพรวมระหว่างเซิร์ฟเวอร์สองเครื่อง นี่คือสิ่งที่ฉันมี: ฐานข้อมูล 500GB ~ 500MB ต่อวันโหลด bcp ~ 50MB การทำธุรกรรมรายวัน ฉันถาม DBA อื่น ๆ ใน บริษัท เกี่ยวกับประเภทการจำลองแบบที่จะใช้ ฉันบอกให้ใช้การจำลองแบบ Snapshot อย่างไรก็ตามจากสิ่งที่ฉันเข้าใจและได้อ่านทุกคืนหลังจากโหลดสแน็ปช็อตจะคัดลอกฐานข้อมูลทั้งหมดไปยังผู้จัดจำหน่ายแล้วเขียนทับเซิร์ฟเวอร์อื่นอย่างสมบูรณ์ สแน็ปช็อตใช้งานได้ในเดลตาหรือเป็นสำเนาที่สมบูรณ์ทุกครั้งหรือไม่?

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

3
จัดทำเอกสารเว็บยักษ์ใหญ่ของขั้นตอนการจัดเก็บที่เกี่ยวข้องระหว่างกันในฐานข้อมูล MS SQL: เครื่องมือหรือรูปแบบใด
ฉันหวังว่านี่เป็นคำถามที่มีคำตอบสั้นกว่า "อ่านหนังสือ 1,000 หน้า" แต่ถ้าเป็นสถานการณ์จริงให้ฉันตอบด้วย ฉันไม่ใช่ DBA จริงฉันเป็นนักพัฒนาซอฟต์แวร์ที่รู้ตัวว่าเราต้องการ DBA และร้านค้าที่ฉันทำงานมี DBA เป็นศูนย์ อย่างไรก็ตามการออกแบบฐานข้อมูล MS SQL ของเรารวมถึงขั้นตอนการจัดเก็บหลักหลายอย่างนั้นเป็นเรื่องที่ยุ่งยาก ขั้นตอนการจัดเก็บนั้นช้าเราสงสัยว่ามีข้อบกพร่อง แต่เราไม่รู้ด้วยซ้ำว่าพวกมันคาดหวังว่าจะทำงานอย่างไรเราจึงไม่รู้วิธีแก้ไข เป็นการเริ่มต้นฉันตัดสินใจว่าเราจะบันทึกว่ามันควรจะทำงานอย่างไรทั้งหมดจากนั้นเราจะเริ่มการทดสอบหน่วยและสร้างชุดการทดสอบหน่วยที่ช่วยพิสูจน์ว่าขั้นตอนการจัดเก็บใช้งานได้จริง ตรรกะที่พวกเขาดำเนินการเป็นส่วนสำคัญของแอปพลิเคชันของเราคุณสามารถพูดได้ว่ามันเป็น "มงกุฎเพชร" ของผลิตภัณฑ์หลักของ บริษัท ของเราและวิธีการทำงานนั้นไม่มีเอกสารอย่างสมบูรณ์ ฉันกำลังมองหาเอกสารทางเทคนิคเฉพาะที่ DBA มืออาชีพอาจคาดหวังว่าจะมีอยู่หรืออาจเขียนด้วยตัวเองหากพวกเขาต้องเข้าใจเว็บยักษ์ของขั้นตอนการจัดเก็บที่เรียกกัน รูปแบบปกติสำหรับการบันทึกขั้นตอนการจัดเก็บขนาดใหญ่คืออะไร คำอธิบายของค่าที่คาดไว้สำหรับ In พารามิเตอร์แต่ละตัว (เช่น "preconditions", "postconditions" เช่นสำหรับพารามิเตอร์บูลีนจะมีการเปลี่ยนแปลงอย่างไรเมื่อคุณเปิดหรือปิด ฯลฯ ) โดยทั่วไปแล้วเอกสารจะมีวิธีการอย่างไร? ความคิดเห็น SQL เท่านั้น? การขับรถภายนอกที่เฉพาะเจาะจงกับวัตถุประสงค์? "เอกสาร" ภายนอกหรือไม่ เราไม่มีเครื่องมือ SQL นอกเหนือจากสตูดิโอการจัดการ MS SQL แต่เราสงสัยว่ามีเครื่องมือที่จะทำให้เข้าใจจัดทำเอกสารและทดสอบสภาพแวดล้อมของเราดีขึ้นหรือไม่ …

1
เหตุใดจึงมีรายการที่ตกเป็นเหยื่อบนกราฟการหยุดชะงัก
ฉันพยายามเรียนรู้วิธีการวิเคราะห์กราฟการหยุดชะงักของ SQL Server 2008และฉันค้นหารายการจำนวนมากด้วย<victim-list>โหนดว่าง ฉันไม่เข้าใจสิ่งที่รายการเหล่านี้เป็นตัวแทน: หากไม่มีเหยื่อฉันจะระบุแหล่งรอที่ทำให้เกิดการหยุดชะงักได้อย่างไร ผลงานเหล่านี้หมายถึงอะไร นี่คือตัวอย่างย่อของรายการที่ฉันเห็น: <deadlock-list> <deadlock> <victim-list /> <process-list> <process id="processd2b6508" taskpriority="0" logused="10000" waittime="31" schedulerid="63" kpid="9104" status="suspended" spid="69" sbid="0" ecid="184" priority="0" trancount="0" lastbatchstarted="2012-07-30T01:10:45.550" lastbatchcompleted="2012-07-30T01:10:45.550" clientapp=".Net SqlClient Data Provider" hostname="XXXXXXX" hostpid="3648" isolationlevel="read committed (2)" xactid="30461033" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="" line="1" sqlhandle="0x020000002340c50225c17d0eec9bf7c51129348edffd1c70" /> <!--About 2 …

2
วิธีที่ดีในการโทรงานตัวแทนของเซิร์ฟเวอร์ SQL หลายงานตามลำดับจากงานหลักหนึ่งงานหรือไม่
ฉันมีงานตัวแทนของเซิร์ฟเวอร์ SQL หลายงานที่ควรเรียกใช้ตามลำดับ เพื่อให้ภาพรวมที่ดีของงานที่ควรจะดำเนินการฉันได้สร้างงานหลักที่เรียกงานอื่น ๆ EXEC msdb.dbo.sp_start_job N'TEST1'ที่มีการเรียกร้องให้ sp_start_jobเสร็จสิ้นทันที (งานขั้นตอนที่ 1) แต่แล้วฉันต้องการงานหลักของฉันจะรอจนกว่างานTEST1จะเสร็จสิ้นก่อนที่จะเรียกงานต่อไป ดังนั้นฉันจึงได้เขียนสคริปต์ขนาดเล็กนี้ที่เริ่มดำเนินการทันทีหลังจากงานถูกเรียก (ขั้นตอนงาน 2) และบังคับให้งานหลักรอจนกว่างานย่อยจะเสร็จสิ้น: WHILE 1 = 1 BEGIN WAITFOR DELAY '00:05:00.000'; SELECT * INTO #jobs FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;', 'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'', @execution_status = 0, @job_aspect = N''JOB'''); IF NOT (EXISTS (SELECT top 1 * FROM …

1
จำนวนจริงบวกต่ำสุดที่เป็นไปได้จริงคืออะไร
MSDN กล่าวว่าช่วงของตัวเลข REAL คือ - 3.40E + 38 ถึง -1.18E - 38, 0 และ 1.18E - 38 ถึง 3.40E + 38 ดูเหมือนว่าขีด จำกัด ล่างที่แท้จริงนั้นต่ำกว่ามาก สคริปต์ต่อไปนี้จะเติมคอลัมน์ REAL ด้วย 1.401298E-45: CREATE TABLE a ( r1 REAL NULL , r2 REAL NULL , r3 REAL NULL ) ; GO INSERT INTO a ( …

2
มีวิธีการตั้งค่าในการโหลด / อ่านสาขาต้นไม้ด้วย HierarchyId
ฉันกำลังเล่นกับ HierarchyId และฉันยังไม่ได้คิดวิธีที่จะทำตามต่อไปนี้: แทรกทรีย่อยทั้งหมดในคราวเดียว ดึงทรีย่อยทั้งหมดในครั้งเดียว คำถามนี้เกี่ยวข้องกับคำถามก่อนหน้าของฉันและฉันสงสัยว่าวิธีเดียวที่จะทำงานสองอย่างนี้ให้สำเร็จด้วย HierarchyId คือหนึ่งโหนดหรือหนึ่งระดับในแต่ละครั้ง หากฉันใช้เส้นทางที่เป็นรูปธรรมการกระทำทั้งสองอย่างสามารถทำได้อย่างง่ายดายโดยคำสั่งพื้นฐานเดียว (และไม่สำคัญ) ฉันกำลังคิดถึงอะไร แก้ไข: ฉันพลาดวิธีย้ายทรีย่อย แต่ฉันเรียนรู้จากความคิดเห็นของ Mikael Eriksson

2
กู้คืนไฟล์ bak ไปยังไฟล์ฐานข้อมูล mdf และ ldf ที่เล็กกว่า
ฉันมีฐานข้อมูลดั้งเดิมที่ขาดการออกแบบที่น่ากลัวฉันจะไม่เข้าไปที่นี่ แต่ไฟล์บนเซิร์ฟเวอร์นั้นมีขนาดใหญ่มาก ฉันมี: MyDatabase.mdf: 24.8GB MyDatabase.ldf: 114.6GB ฐานข้อมูลนี้ถูกสำรองข้อมูลเป็นไฟล์. bak ทุกคืนและส่งไปยังเซิร์ฟเวอร์รายงานของเราซึ่งมีการกู้คืน ไฟล์. bak มีขนาดเล็กกว่ามากเพียง 1.8GB อย่างไรก็ตามเมื่อฉันพยายามกู้คืนบนเซิร์ฟเวอร์การรายงานมันล้มเหลวเนื่องจากมีพื้นที่ไม่เพียงพอ เซิร์ฟเวอร์มีพื้นที่ว่างประมาณ 100GB และพยายามทำลายไฟล์ทั้งหมดที่ใช้งานบนเซิร์ฟเวอร์ดั้งเดิม 139.4GB เว้นแต่ว่าฉันรู้ว่าการบีบอัดผิดอย่างน่ากลัวฉันค่อนข้างมั่นใจว่าไฟล์ 1.8GB นั้นไม่ได้เพิ่มขึ้น 7400% คำถามของฉัน: มีวิธีใดที่จะบอกให้ SQL Server กู้คืนไฟล์ข้อมูลสำรองนี้โดยไม่ต้องจองพื้นที่ล่วงหน้า ฉันไม่สนใจเกี่ยวกับบันทึกใด ๆ ฉันแค่ต้องการข้อมูลเพื่ออยู่ที่นั่น ฉันเข้าใจฐานข้อมูลจากมุมมองการพัฒนาและสคีมา แต่ฉันไม่เคยใช้ DBA ประเภทใดเลย นี่คือบน SQL Server 2008 R2 ขอบคุณสำหรับความช่วยเหลือหรือคำแนะนำ

5
วิธีฟื้นฟูตัวนับประสิทธิภาพ SQL Server 2008 R2
ฉันใช้ SQL Server 2008 R2 Developer บน Windows 7 x64 เป็นอินสแตนซ์เริ่มต้น ด้วยเหตุผลบางอย่างเคาน์เตอร์วัดประสิทธิภาพของ SQL Server ดูเหมือนจะหายไป SELECT * FROM sys.dm_os_performance_countersส่งกลับศูนย์แถว lodctr /T:perf-MSSQLSERVERsqlctr.iniผมพยายามทำงาน แม้ว่ามันจะเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด แต่ก็ไม่ได้แก้ไขอะไรแม้หลังจากรีสตาร์ทบริการรีจิสตรี ที่จริงเคาน์เตอร์หายไปจาก perfmon แล้ว unlodctr MSSQLSERVERยังคงบอกว่าตัวนับไม่ได้รับการติดตั้ง แต่lodctr /Q:MSSQLSERVERบอกว่ามีอยู่และเปิดใช้งานอยู่ ตัวนับ Windows และ. NET ปกติทำงานได้ดี ในบันทึกข้อผิดพลาดของ Windows ฉันเห็นข้อผิดพลาด 8317: ไม่สามารถสอบถามค่า 'ตัวนับแรก' ที่เกี่ยวข้องกับรีจิสตรีคีย์ 'HKLM \ SYSTEM \ CurrentControlSet \ Services \ …

2
วิธีสร้างการแจ้งเตือนเหตุการณ์ที่เรียกใช้งาน / ขั้นตอนเมื่อทำมิเรอร์การเปลี่ยนแปลงสถานะ
ฉันถามคำถามตามลำดับของอันนี้ฉันสามารถส่งสตริงผ่าน TCP โดยใช้ T-SQL ได้ไหม? Remus Rusanu แสดงให้เห็นว่ามันเป็นทางออกที่ดีที่สุดสำหรับปัญหาของฉัน แต่ ... ฉันยังเด็กเกินไปที่จะเข้าใจและทำทุกสิ่งที่เขาพูด จนถึงตอนนี้ฉันคิดว่าสิ่งที่ฉันต้องสร้างเหตุการณ์การแจ้งเตือนสำหรับ DATABASE_MIRRORING_STATE_CHANGE ฉันถูกต้องหรือไม่ ฉันจะสร้างการแจ้งเตือนเหตุการณ์นี้ได้อย่างไรเมื่อมีการทริกเกอร์แทรกบรรทัดในตารางที่จัดเก็บการประทับเวลาและ ID ที่มาจากการแจ้งเตือน จนถึงตอนนี้ฉันกำลังตั้งค่าการแจ้งเตือนหนึ่งรายการต่อ ID แต่ละคนกำลังทำงานเช่นนี้ (ตัวอย่างนี้สำหรับ ID = 1): DECLARE @state AS varchar(50); SELECT @state = mirroring_state_desc FROM SYS.database_mirroring WHERE mirroring_guid IS NOT NULL; IF (@state IS null) SET @state = ' '; INSERT INTO …

3
บันทึกการเชื่อมต่อใน SSMS หรือไม่
ฉันสามารถบันทึกเซสชันหรือโปรไฟล์บางประเภทใน SSMS (2008 r2) ที่จะเปิดการเชื่อมต่อไปยังรายการเซิร์ฟเวอร์ฐานข้อมูลที่บันทึกไว้เมื่อฉันเปิด SSMS ได้หรือไม่ ตัวอย่างเช่นฉันมักจะเปิด SSMS แล้วเชื่อมต่อกับเซิร์ฟเวอร์ SQL NY-DB01, NY-DB02 ฯลฯ ... ฉันสามารถมีทางลัดบางอย่างเพื่อเปิดสิ่งเหล่านี้ทั้งหมดในครั้งเดียวได้หรือไม่?

2
เพื่อเพิ่มประสิทธิภาพฐานข้อมูลให้มากที่สุดคำสั่งใดที่ควรรันหลังจากโหลดข้อมูลจำนวนมากลงใน SQL Server 2008 ผ่าน SSIS
ฉันได้เขียนแพ็คเกจ SSIS เพื่อโหลดข้อมูลทดสอบลงในฐานข้อมูลเปล่า ตารางบางตารางมีขนาดใหญ่มาก (ประมาณ 700 ล้านแถว) เมื่อแพคเกจ SSIS เสร็จสิ้นแล้วมีคำสั่งใดบ้างที่ฉันควรเรียกใช้ (ในฐานะผู้ฝึกงาน DBA!) เพื่อเพิ่มประสิทธิภาพของฐานข้อมูล? ตัวอย่างเช่นฉันดำเนินการEXEC sp_updatestatsแต่รายงานว่าไม่จำเป็นต้องมีการอัพเดตดัชนี มีรายการของสิ่งที่ต้องทำเมื่อโหลดข้อมูลจำนวนมากหรือ SQL Server 2008 จัดการสิ่งเหล่านั้นให้คุณหรือไม่?

3
รูปแบบการกู้คืน SQL Server 2008 / R2
ฐานข้อมูลทั้งหมดของเราบนเซิร์ฟเวอร์บางตัวไม่จำเป็นต้องใช้แบบจำลองการกู้คืนข้อมูลเต็มรูปแบบ (เราไม่ทำการสำรองข้อมูลบันทึกธุรกรรม) และค่าเริ่มต้นควรจะสร้างฐานข้อมูลและระบุรูปแบบการกู้คืนแบบง่ายเสมอ ค่อนข้างบ่อยและด้วยเหตุผลบางประการฐานข้อมูลจำนวนมากถูกสร้างขึ้นโดยใช้ SSMS อย่างไรก็ตามข้อผิดพลาดสามารถทำได้และผู้ปฏิบัติงานสามารถลืมระบุรูปแบบการกู้คืนอย่างง่าย สิ่งนี้นำไปสู่ ​​"แปลกใจ" ในอีกสองสามวันต่อมาเมื่อกล่องกำลังต่อสู้กับพื้นที่ดิสก์เนื่องจากไฟล์บันทึก 60GB สามหรือสี่ไฟล์ที่ไม่เคยถูกตัดทอน ฉันสามารถสร้างรูปแบบการกู้คืนอย่างง่ายเป็นค่าเริ่มต้นสำหรับฐานข้อมูลใหม่โดยการกำหนดค่ารูปแบบการกู้คืนในmodelฐานข้อมูล อย่างไรก็ตามแนะนำนี้ถ้าฉันทำสิ่งนี้มันจะกลับมาและกัดฉันในทางใดทางหนึ่งในอนาคต?

1
SQL Server 2008 R2 Dirty อ่านแล้ว - ไม่ใช่อะตอมอย่างไร?
ฉันสงสัยว่า "การอ่านที่สกปรก" สกปรกแค่ไหนนั้นสามารถอยู่ภายใต้ระดับการแยกแบบไม่ต้องอ่านได้ ฉันเข้าใจว่าแถวที่ได้รับการปรับปรุงแล้วแต่ยังไม่ได้มีการยืนยันจะปรากฏให้เห็น แต่: แถวสามารถปรากฏเป็นอัปเดตบางส่วนได้หรือไม่นั่นคือบางคอลัมน์มีการอัปเดตและบางคอลัมน์ไม่ได้ คอลัมน์เดียวสามารถปรากฏการปรับปรุงบางส่วน ตัวอย่างเช่นถ้าคุณมีคอลัมน์ varchar (4000) ที่อยู่ในกระบวนการของการปรับปรุงอย่างสมบูรณ์และสมมติว่ามันมี 4,000 ตัวอักษร คุณสามารถอ่านพูดว่า 2k chars จากสถานะก่อนหน้าและ 2k chars จากสถานะใหม่ได้หรือไม่? แล้ว varchar (สูงสุด) ที่มีความยาว> 8k อัปเดต: หลังจากมีการโต้วาทีความเห็นร่วมขั้นต่ำคือถ้าขนาดคอลัมน์> 8KB ผู้อ่านสกปรกแม้อยู่ในคอลัมน์ก็เป็นไปได้

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