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

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

4
คำแนะนำในการเพิ่มประสิทธิภาพการค้นหา SQL Server 2005/8
ฉันกำลังมองหาการให้ความรู้แก่ทีมเกี่ยวกับการเขียนแบบสอบถาม SQL Server ที่ดีขึ้นและสงสัยว่าคำแนะนำที่ดีที่สุดของผู้คนคืออะไรสำหรับการปรับปรุงประสิทธิภาพ ตัวอย่างเช่นฉันเคยมี DBA ซึ่งยืนยันว่าการนับ (*) จะทำงานได้แย่กว่าการนับ (1) (ฉันไม่รู้เลยว่าเธอถูกหรือว่ายังใช้ได้กับการเพิ่มประสิทธิภาพการสืบค้นล่าสุด) อะไรสิ่งที่ง่ายที่ฉันควรจะบอกทีมงานที่จะลองและมักจะใช้หรือหลีกเลี่ยง? ฉันกำลังมองหาสิ่งที่ (a) อาจสร้างความแตกต่างที่สมเหตุสมผลและ (b) ตรงไปตรงมา 1 - 2 บรรทัดเพื่อระบุ

1
วิธีแก้ไข RESOURCE_SEMAPHORE และ RESOURCE_SEMAPHORE_QUERY_COMPILE ประเภทการรอ
เรากำลังพยายามหาสาเหตุของการทำงานของ sql server ที่ทำงานช้าการสืบค้น / การดึงข้อมูลจากหนึ่งในฐานข้อมูลขนาด 300 GB โฮสต์บนเซิร์ฟเวอร์ด้วยการกำหนดค่าด้านล่าง: เซิร์ฟเวอร์ Windows 2003 R2, SP2, Enterprise Edition, RAM 16 GB, 12 CPU'S 32 บิต SQL Server 2005, SP4, Enterprise Edition, 32 บิต เราได้แจ้งธุรกิจเกี่ยวกับการอัปเกรดเป็น 64 บิตซึ่งจะใช้เวลามากกว่าหนึ่งเดือน แต่สำหรับปัญหาปัจจุบันเราพยายามรวบรวมข้อมูลถ้าเราสามารถแก้ไขความกดดันของหน่วยความจำหรือในที่สุดก็มาถึงข้อสรุปเพื่อเพิ่มแรม การดำเนินการเสร็จสิ้น: การจัดทำดัชนีและอัพเดตสถานะใหม่นั้นเหมาะสมสำหรับฐานข้อมูล ดังที่แสดงไว้ด้านล่างเราได้สังเกตสัญญาณเซมาฟอร์เป็นเวลา 5 วันที่ผ่านมาวิ่งในช่วงเวลาโหลด: ข้อมูลน้อยหลังจากแบบสอบถามด้านล่าง: ขนาดของบัฟเฟอร์ = 137272 SELECT SUM(virtual_memory_committed_kb) FROM sys.dm_os_memory_clerks WHERE type='MEMORYCLERK_SQLBUFFERPOOL' …


2
การอ้างอิงบริบทของเอเจนต์ SQL PowerShell
ที่งานใหม่ของฉันเรามีอินสแตนซ์ที่มีชื่อหลายรายการในแต่ละเซิร์ฟเวอร์ เช่น Server1 \ Dev Server1 \ DevIntegrated Server1 \ QA ฉันมีสคริปต์ SQL PowerShell ในงานที่เรียกไปยังระบบปฏิบัติการเรียกใช้Foo.exeแต่ต้องผ่านพารามิเตอร์บรรทัดคำสั่ง (สตริงการเชื่อมต่อ) งาน SQL Agent จะมีอยู่ในแต่ละอินสแตนซ์ด้วยขั้นตอนการพิมพ์ PowerShell ที่จำเป็นต้องรู้ว่าบริบทปัจจุบันคืออะไร ieการดำเนินการนี้เริ่มต้นบน DevIntegrated ฉันไม่ต้องการให้สคริปต์เริ่มต้นด้วย ... $thisInstance = "Dev" ... โดยเฉพาะอย่างยิ่งเมื่อฉันต้องแก้ไขว่าเมื่อเราย้ายไปยังสภาพแวดล้อม (เซิร์ฟเวอร์ใหม่และอินสแตนซ์ที่มีชื่อ) ในอีกไม่กี่เดือนข้างหน้า ถ้าฉันเริ่ม SQLPS ฉันสามารถกำหนดอินสแตนซ์ของฉันโดยการแบ่งส่วนและทำให้ผลลัพธ์ของ Get-Location หรือทำงาน (Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName เมื่อตัวแทนของ SQL เริ่มงานประเภท PowerShell จะเริ่มใน …

3
ค้นหาผู้ใช้กำพร้า
ใน SQL Server 2005 มีวิธีการค้นหาผู้ใช้ที่ไม่มีอยู่ในระดับเซิร์ฟเวอร์ (บัญชีที่ถูกลบในระดับเซิร์ฟเวอร์ แต่ไม่ได้ถูกแยกจากฐานข้อมูลก่อนที่จะถูกลบ) หรือบัญชีที่ไม่ได้เชื่อมโยง (บัญชีอาจถูกลบที่ระดับเซิร์ฟเวอร์ แต่ไม่ใช่ระดับ db จากนั้นอ่านอีกครั้ง แต่ระดับ db ไม่เคยล้างข้อมูล) ฉันมีเซิร์ฟเวอร์ที่ยุ่งมากและมันก็ยอดเยี่ยมมากถ้ามีคำถามให้เรียกใช้เพื่อค้นหาสิ่งเหล่านี้

1
อัปเกรด SQL Server 2005 เป็น SQL Server 2012
ฉันมีการตั้งค่าสภาพแวดล้อมการทดสอบด้วยสิ่งต่อไปนี้: เครื่องเสมือน (Hyper-V) Windows Server 2008 R2 SP1 (x64 บิต) SP4 นักพัฒนา Windows SQL Server 2005 SP4 (x64 บิต) (ชื่ออินสแตนซ์เริ่มต้น) 1 ฐานข้อมูลพร้อมการจำลองแบบผสานตั้งค่า ... 3 สิ่งพิมพ์ที่มีสมาชิก 2 ราย เรากำลังทดสอบขั้นตอนการอัปเกรดเป็น SQL Server 2012 Developer Edition (sp1) ... ฉันดาวน์โหลด iso สำหรับ 64bit SQL Server 2012 Dev (sp1) จาก MSDN (สำเนาลิขสิทธิ์แบบเต็ม) และเริ่มลงเส้นทางการอัพเกรด ในขั้นตอนสุดท้ายที่เริ่มต้นการตรวจสอบเกณฑ์ที่แตกต่างกันเราพบปัญหาที่แปลกประหลาดตามที่อธิบายไว้ด้านล่าง: Rule …

2
ETL: การแยกข้อมูลจาก 200 ตาราง - การไหลของข้อมูล SSIS หรือ T-SQL แบบกำหนดเอง
จากการวิเคราะห์ของฉันแบบจำลองมิติที่สมบูรณ์สำหรับคลังข้อมูลของเราจะต้องมีการดึงข้อมูลจากแหล่งข้อมูลกว่า 200 ตาราง บางส่วนของตารางเหล่านี้จะถูกดึงมาเป็นส่วนหนึ่งของการโหลดที่เพิ่มขึ้นและอื่น ๆ จะเป็นการโหลดแบบเต็ม โปรดทราบว่าเรามีฐานข้อมูลแหล่งข้อมูลประมาณ 225 รายการด้วยสคีมาเดียวกัน จากสิ่งที่ฉันได้เห็นการสร้างการไหลของข้อมูลอย่างง่าย ๆ ใน SSIS ด้วยแหล่งข้อมูล OLE DB และปลายทาง OLE DB ต้องการคอลัมน์และชนิดข้อมูลที่จะถูกกำหนดในขณะออกแบบ ซึ่งหมายความว่าในที่สุดฉันจะจบลงด้วยการไหลของข้อมูลมากกว่า 200 สำหรับการแยกเพียงอย่างเดียว จากมุมมองการบำรุงรักษาสิ่งนี้ทำให้ฉันกลายเป็นปัญหาใหญ่ ถ้าฉันต้องการทำการเปลี่ยนแปลงกวาดบางอย่างกับรหัสการแยกฉันจะต้องแก้ไขกระแสข้อมูลที่แตกต่างกัน 200 รายการ อีกทางเลือกหนึ่งฉันเขียนสคริปต์ขนาดเล็กซึ่งอ่านฐานข้อมูลต้นฉบับชื่อตารางและคอลัมน์ที่ฉันต้องการแยกจากชุดของตารางข้อมูลเมตา รหัสทำงานในหลายลูปและใช้ไดนามิก SQL เพื่อแยกจากตารางต้นฉบับผ่านเซิร์ฟเวอร์ที่เชื่อมโยงและ OPENQUERY จากการทดสอบของฉันสิ่งนี้ยังไม่เร็วเท่ากับการใช้กระแสข้อมูล SSIS กับแหล่ง OLEDB และปลายทาง ดังนั้นฉันสงสัยว่าฉันมีทางเลือกประเภทใด ความคิดจนถึงขณะนี้รวมถึง: การใช้EZAPIเพื่อสร้างแพ็คเกจ SSIS แบบเป็นโปรแกรมด้วยการไหลของข้อมูลอย่างง่าย ตารางและคอลัมน์ที่จะแยกจะมาจากตารางเมทาดาทาที่กล่าวถึงก่อนหน้านี้ ซื้อซอฟต์แวร์ภายนอก (ส่วนประกอบการไหลของข้อมูลแบบไดนามิก) วิธีที่ดีที่สุดในการเข้าถึงสิ่งนี้คืออะไร? เมื่อพูดถึงการเขียนโปรแกรม. NET ฉันเป็นผู้เริ่มต้นดังนั้นเวลาที่ต้องใช้ในการเพิ่มระดับความรู้พื้นฐานก็เป็นเรื่องที่น่ากังวลเช่นกัน

2
ความเสี่ยงในการเปลี่ยนเป็น ARITHABORT ON
ฉันทำงานกับผู้จัดจำหน่ายด้วยข้อตกลงที่พวกเขาให้แอปพลิเคชันหลักและฉันสามารถสร้างส่วนขยายของตัวเองได้ตราบใดที่ฉันไม่ได้แก้ไขแอปพลิเคชันหลัก มันสร้างขึ้นใน ColdFusion เชื่อมต่อกับฐานข้อมูล SQL Server 2005 บางรายงานที่ฉันสร้างขึ้นนั้นขึ้นอยู่กับมุมมองโดยใช้ฟังก์ชั่นที่คำนวณจากตารางหลักและรายงานเริ่มช้ามากเมื่อตารางใหญ่ขึ้น เพื่อเพิ่มความเร็วในรายงานที่ฉันต้องการที่จะใช้มุมมองการจัดทำดัชนี แต่หลังจากสร้างมุมมองที่จัดทำดัชนีไว้ในสภาพแวดล้อมการทดสอบของฉันแล้วแอปพลิเคชันหลักไม่สามารถแทรกลงในตารางหลักได้อีกต่อไป (ซึ่งจะส่งกลับข้อผิดพลาดที่ARITHABORTจำเป็นต้องONใช้เมื่อใช้มุมมองที่จัดทำดัชนี) ดังนั้นดูเหมือนว่าเพื่อที่จะใช้มุมมองที่มีการจัดทำดัชนีฉันต้องมีแอปพลิเคชันหลักSET ARITHABORT ONทุกครั้งที่แทรก / ปรับปรุงตารางหลัก ฉันวิ่งในสภาพแวดล้อมการทดสอบของฉัน: ALTER DATABASE MyDatabase SET ARITHABORT ON; และดูเหมือนว่าจะทำงานได้ดี แต่ผู้ขายของฉันบอกว่าเนื่องจากแอปพลิเคชันมีการค้นหาหลายพันครั้งอาจมีความเสี่ยงที่การตั้งค่านี้อาจทำลายหนึ่งในการค้นหาเหล่านี้และหากเรามีปัญหาฐานข้อมูลที่ไม่คาดคิดในอนาคตพวกเขาจะยืนยันว่าจะคืนค่าเริ่มต้น มีคำถามที่เกิดขึ้นจริงที่จะถูกทำลายโดยSET ARITHABORT ON? มีสถานการณ์ใดบ้างที่จะรักษาไว้ได้ดีกว่าOFF? TL; DR สำหรับมุมมองที่จัดทำดัชนีใหม่ของฉันเพื่อการทำงานฉันต้องตั้งค่าARITHABORT ONฐานข้อมูลทั้งหมด แต่ผู้ขายของฉันเตือนว่ามันจะเป็นความเสี่ยงของตัวเอง มีความเสี่ยงหรือไม่?

1
มิเรอร์ - ไม่สามารถเข้าถึงที่อยู่เครือข่ายเซิร์ฟเวอร์
ฉันติดตั้ง SQL Server 2008 R2 แล้ว มันมีสามกรณี ค่าเริ่มต้น (MSSQLServer) อินสแตนซ์แรก อินสแตนซ์ที่สอง ทั้งหมดนี้คือการเข้าสู่ระบบในฐานะบริการเครือข่าย .. ค่าเริ่มต้นอินสแตนซ์คือเซิร์ฟเวอร์หลักอินสแตนซ์แรกคือมิเรอร์ที่สองอินสแตนซ์คือเซิร์ฟเวอร์พยาน ตอนแรกฉันทำการสำรองข้อมูลทั้งหมดและสำรองข้อมูลธุรกรรมของฐานข้อมูลหลักของฉัน กู้คืนไปยังอินสแตนซ์แรกโดยการรักษาชื่อฐานข้อมูลและสถานะการกู้คืนเดียวกันคือไม่มีการกู้คืน ในที่สุดฉันเริ่ม Mirroring และฉันได้รับข้อความแสดงข้อผิดพลาดสองข้อความที่แสดงด้านล่าง

1
พฤติกรรมของ SQL Server TempDB ในสภาพแวดล้อมของหน่วยความจำขนาดใหญ่
การอ่านคำถามนี้ทำให้ฉันนึกถึงคำถามที่ฉันได้ซักพักหนึ่งแล้ว เรามี SQL Server ที่มี RAM ขนาด 512GB ฐานข้อมูลหลักคือ 450 GB เราเห็นการกระทำค่อนข้างมากใน TempDB (ตกลงฉันคิดว่ามันเป็น "การกระทำค่อนข้างมาก" - อาจไม่ได้!) ฉันติดตั้งเซิร์ฟเวอร์ตัวอย่างของ RamDisk Plus สร้าง ramdrive 50GB ชี้ไปที่ TempDB แล้วไม่เห็นการปรับปรุงประสิทธิภาพเลย การเขียนไปที่ TempDB มักจะส่งผลให้เกิดการเขียนทางกายภาพจริงไปยังดิสก์เสมอหรือเป็น TempDB ที่เขียนโดย SQL Server สำหรับการเขียนที่ล่าช้าเช่นในแคชของระบบไฟล์ Windows ramdisk ไม่มีจุดหมายในสถานการณ์นี้หรือไม่? ฉันรู้ว่า SQL Server 6.5 ได้รับการสนับสนุนสำหรับ TempDB-In-Ram แต่ฉันเห็นว่าเลิกใช้มานานแล้ว!

3
เลือก DISTINCT ในหนึ่งคอลัมน์ขณะส่งคืนคอลัมน์อื่นหรือไม่
ฉันมีแบบสอบถามซึ่งใช้ตารางการค้นหาสามตารางเพื่อรับข้อมูลทั้งหมดที่ฉันต้องการ ฉันต้องมีDISTINCTค่าสำหรับหนึ่งคอลัมน์ แต่ฉันต้องการข้อมูลที่เหลือที่เกี่ยวข้องอีกด้วย รหัส SQL ของฉัน: SELECT acss_lookup.ID AS acss_lookupID, acss_lookup.product_lookupID AS acssproduct_lookupID, acss_lookup.region_lookupID AS acssregion_lookupID, acss_lookup.document_lookupID AS acssdocument_lookupID, product.ID AS product_ID, product.parent_productID AS productparent_product_ID, product.label AS product_label, product.displayheading AS product_displayheading, product.displayorder AS product_displayorder, product.display AS product_display, product.ignorenewupdate AS product_ignorenewupdate, product.directlink AS product_directlink, product.directlinkURL AS product_directlinkURL, product.shortdescription AS product_shortdescription, product.logo …

3
เหตุใดแบบสอบถามรวมจึงเร็วขึ้นอย่างมากเมื่อใช้ GROUP BY clause มากกว่าไม่มี
ฉันแค่อยากรู้ว่าเหตุใดแบบสอบถามโดยรวมจึงทำงานเร็วขึ้นมากโดยมีGROUP BYประโยคมากกว่าไม่มี ตัวอย่างเช่นแบบสอบถามนี้ใช้เวลาเกือบ 10 วินาทีในการเรียกใช้ SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 ในขณะนี้อันนี้ใช้เวลาน้อยกว่าหนึ่งวินาที SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 GROUP BY CreatedDate มีเพียงหนึ่งเดียวCreatedDateในกรณีนี้ดังนั้นคิวรีที่จัดกลุ่มจะส่งคืนผลลัพธ์เดียวกับกลุ่มที่ไม่ได้จัดกลุ่ม ฉันสังเกตเห็นแผนการดำเนินการสำหรับแบบสอบถามที่สองจะแตกต่างกัน - แบบสอบถามที่สองใช้ Parallelism ในขณะที่แบบสอบถามแรกไม่ เป็นเรื่องปกติหรือไม่ที่เซิร์ฟเวอร์ SQL จะประเมินคิวรีแบบรวมแตกต่างกันถ้ามันไม่มี GROUP BY clause? และมีสิ่งที่ฉันสามารถทำได้เพื่อปรับปรุงประสิทธิภาพของแบบสอบถามที่ 1 โดยไม่ต้องใช้GROUP BYคำสั่งหรือไม่ แก้ไข ฉันเพิ่งเรียนรู้ว่าฉันสามารถใช้OPTION(querytraceon 8649)ในการตั้งค่าใช้จ่ายค่าใช้จ่ายของความเท่าเทียมเป็น 0 ซึ่งทำให้แบบสอบถามใช้ความเท่าเทียมและลดรันไทม์เป็น 2 วินาทีแม้ว่าฉันจะไม่รู้ว่ามีข้อเสียในการใช้คำใบ้แบบสอบถามนี้หรือไม่ SELECT MIN(CreatedDate) …

2
ความแตกต่างของประสิทธิภาพ INSERT ระหว่างตารางชั่วคราวและตัวแปรตาราง
ฉันมีปัญหาดังต่อไปนี้ใน SQL Server 2005: การพยายามแทรกแถวบางแถวในตัวแปรตารางใช้เวลานานเมื่อเทียบกับการแทรกแบบเดียวกันโดยใช้ตารางชั่วคราว นี่คือรหัสที่จะแทรกลงในตัวแปรตาราง DECLARE @Data TABLE(...) INSERT INTO @DATA( ... ) SELECT .. FROM ... นี่คือรหัสที่จะแทรกลงในตารางอุณหภูมิ CREATE #Data TABLE(...) INSERT INTO #DATA( ... ) SELECT .. FROM ... DROP TABLE #Data ตารางชั่วคราวไม่มีคีย์หรือดัชนีใด ๆ ส่วนที่เลือกจะเหมือนกันระหว่าง 2 แบบสอบถามและจำนวนผลลัพธ์ที่ส่งคืนโดยการเลือกคือ ~ 10,000 แถว เวลาที่ใช้ในการดำเนินการเลือกอย่างเดียวคือ ~ 10 วินาที เวอร์ชันของ temp table ใช้เวลาในการรันสูงสุด …

4
คุณรู้วิธีง่ายๆในการสร้างหนึ่งบันทึกในแต่ละชั่วโมงของ 12 ชั่วโมงที่ผ่านมา?
ฉันมีรายงานที่แสดงจำนวนเหตุการณ์ใน 12 ชั่วโมงที่ผ่านมาจัดกลุ่มตามชั่วโมง ฟังดูง่ายพอ แต่สิ่งที่ฉันดิ้นรนคือทำอย่างไรจึงจะรวมระเบียนที่ครอบคลุมช่องว่าง นี่คือตารางตัวอย่าง: Event ( EventTime datetime, EventType int ) ข้อมูลมีลักษณะดังนี้: '2012-03-08 08:00:04', 1 '2012-03-08 09:10:00', 2 '2012-03-08 09:11:04', 2 '2012-03-08 09:10:09', 1 '2012-03-08 10:00:17', 4 '2012-03-08 11:00:04', 1 ฉันต้องสร้างชุดผลลัพธ์ที่มีหนึ่งระเบียนสำหรับทุก ๆ ชั่วโมงของ 12 ชั่วโมงที่ผ่านมาไม่ว่าจะมีเหตุการณ์ในช่วงเวลานั้นหรือไม่ก็ตาม สมมติว่าเวลาปัจจุบันคือ '2012-03-08 11:00:00' รายงานจะแสดง (คร่าวๆ): Hour EventCount ---- ---------- 23 0 0 0 …

4
การพิจารณาว่าดัชนีบนตารางไม่ได้ถูกใช้
ฉันใช้สคริปต์นี้เพื่อพยายามค้นหาดัชนีที่ไม่เกี่ยวข้อง select o.name as TableName, i.name as IndexName, p.reserved_page_count * 8.0 / 1024 as SpaceInMB, s.* from sys.dm_db_index_usage_stats s inner join sys.objects o on s.object_id = o.object_id inner join sys.indexes i on i.index_id = s.index_id and i.object_id = o.object_id inner join sys.dm_db_partition_stats p on i.index_id = p.index_id and o.object_id = …

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