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

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

2
การรวบรวม SQL ส่งผลกระทบต่อประสิทธิภาพการทำงานของ SQL Server อย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันสร้างอินสแตนซ์ของ SQL Server 2005 และฉันผ่านการSQLServer:SQL Statistics - SQL Compilations/secวัดของ PerfMon ฉันเห็นว่าค่าเฉลี่ยประมาณ 170 หรือมากกว่านั้น ฉันเปิดตัว SQL Profiler และค้นหา SP: Compile หรือ SQL: Compile events เห็นได้ชัดว่าพวกเขาไม่อยู่ ฉันค้นหาStored Procedure/SP:RecompileและTSQL/SQL:StmtRecompileจัดกิจกรรม จำนวนข้อมูลที่ฉันเห็นใน Profiler แสดงให้เห็นว่าสิ่งเหล่านี้เป็นเหตุการณ์ที่ไม่ถูกต้องที่ต้องดูแม้ว่าฉันจะไม่แน่ใจ ดังนั้นคำถามของฉัน คำตอบสำหรับสิ่งเหล่านี้จะดีมาก ฉันจะดูสิ่งที่รวบรวมใน SQL Server ได้อย่างไร ฉันเลือกการวัดที่ไม่ถูกต้องเพื่อดูหรือไม่ ทั้งใน Perfmon หรือ …

2
สร้างบันทึกการทำธุรกรรมขึ้นใหม่
เรามีฐานข้อมูลขนาดใหญ่มาก (~ 6TB) ซึ่งไฟล์บันทึกธุรกรรมถูกลบ (ในขณะที่ SQL Server ปิดตัวลงเราได้ลอง: การถอดและติดตั้งฐานข้อมูลอีกครั้ง และ การยกเลิกการลบไฟล์บันทึกธุรกรรม ... แต่ยังไม่มีอะไรทำงาน เรากำลังทำงานอยู่: ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>') ... แต่ด้วยขนาดของฐานข้อมูลอาจใช้เวลาสองสามวันจึงจะเสร็จสมบูรณ์ คำถาม มีความแตกต่างระหว่างคำสั่งด้านบนและคำสั่งต่อไปนี้หรือไม่? DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS) เราควรจะดำเนินการREPAIR_ALLOW_DATA_LOSSแทนหรือไม่ เป็นที่น่าสังเกตว่าข้อมูลนั้นมาจากแหล่งอื่น ๆ เพื่อให้สามารถสร้างฐานข้อมูลใหม่ได้อย่างไรก็ตามเราสงสัยว่าจะซ่อมแซมฐานข้อมูลได้เร็วกว่าการแทรกข้อมูลทั้งหมดอีกครั้ง ปรับปรุง สำหรับคะแนนการรักษาเหล่านั้น: ALTER DATABASE/REBUILD LOGคำสั่งเสร็จสิ้นหลังจากประมาณ 36 ชั่วโมงและรายงาน: คำเตือน: บันทึกสำหรับฐานข้อมูล 'dbname' ได้ถูกสร้างขึ้นใหม่ ความสอดคล้องของธุรกรรมสูญหายไป สายโซ่ RESTORE ใช้งานไม่ได้และเซิร์ฟเวอร์ไม่มีบริบทในไฟล์บันทึกก่อนหน้านี้อีกต่อไปดังนั้นคุณจะต้องรู้ว่าไฟล์เหล่านั้นคืออะไร คุณควรรัน DBCC …

5
การใช้ IF ใน T-SQL จะทำให้แผนการดำเนินการแคชอ่อนลงหรือไม่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา มีการแนะนำให้ฉันว่าการใช้คำสั่ง IF ใน t-SQL batches นั้นเป็นอันตรายต่อประสิทธิภาพ ฉันพยายามค้นหาคำยืนยันหรือตรวจสอบยืนยันนี้ ฉันใช้ SQL Server 2005 และ 2008 การยืนยันคือชุดที่มีดังต่อไปนี้: - IF @parameter = 0 BEGIN SELECT ... something END ELSE BEGIN SELECT ... something else END SQL Server ไม่สามารถใช้แผนการดำเนินการที่สร้างขึ้นใหม่ได้เนื่องจากการดำเนินการครั้งต่อไปอาจต้องใช้สาขาอื่น นี่หมายความว่า SQL Server จะกำจัดหนึ่งสาขาทั้งหมดจากแผนการดำเนินการตามพื้นฐานของการดำเนินการปัจจุบันซึ่งสามารถกำหนดสาขาที่ต้องการได้แล้ว นี่เป็นเรื่องจริงหรือ …

5
เหตุใดเซิร์ฟเวอร์ที่เชื่อมโยงจึงมีข้อ จำกัด ถึง 10 สาขาในนิพจน์ CASE
ทำไมCASEการแสดงออกนี้: SELECT CASE column WHEN 'a' THEN '1' WHEN 'b' THEN '2' ... c -> i WHEN 'j' THEN '10' WHEN 'k' THEN '11' END [col] FROM LinkedServer.database.dbo.table สร้างผลลัพธ์นี้หรือไม่ ข้อความแสดงข้อผิดพลาด: ข่าวสารเกี่ยวกับ 8180, ระดับ 16, สถานะ 1, คำสั่ง Line 1 ไม่สามารถจัดเตรียมได้ ข่าวสารเกี่ยวกับ 125, ระดับ 15, สถานะ 4, นิพจน์กรณีบรรทัด 1 อาจซ้อนอยู่ในระดับ 10 …

4
เป็นไปได้ในการสำรองและกู้คืนส่วนหนึ่งของฐานข้อมูลใน sql-server หรือไม่?
เรามีฐานข้อมูล SQL Server 2005 ที่เราถ่ายโอนจากเว็บไซต์ลูกค้าของเราเป็นประจำ การดำเนินการนี้ใช้เวลานานเนื่องจากเราไม่มีการเชื่อมต่อโดยตรงและต้องโอนไฟล์ผ่านแอปพลิเคชันการถ่ายโอนไฟล์ผ่านเว็บ ฐานข้อมูลปัจจุบันมีขนาดประมาณ 10GB แต่เราไม่ต้องการข้อมูลทั้งหมด - ส่วนใหญ่อยู่ในตารางตรวจสอบและตารางที่เก็บค่าที่คำนวณได้ซึ่งสามารถสร้างขึ้นใหม่ได้ ฉันดูที่การสร้างกลุ่มไฟล์เพื่อเก็บตารางการตรวจสอบและหวังว่าฉันจะสำรองและกู้คืนกลุ่มไฟล์หลักได้ ฉันสามารถสำรองข้อมูลได้ดี แต่เมื่อกู้คืนฉันพบข้อผิดพลาดแจ้งว่าฉันไม่ได้กู้คืนไปยังฐานข้อมูลเดียวกัน เป็นไปได้หรือไม่ที่จะกู้คืนส่วนหนึ่งของฐานข้อมูลไปยังเซิร์ฟเวอร์อื่นโดยใช้กลุ่มไฟล์? มีวิธีที่ดีกว่าในการทำเช่นนี้?

3
การลดขนาดไฟล์บันทึกของ SQL Server มีผลต่อประสิทธิภาพอย่างไร
ฉันมีฐานข้อมูล SQL Server 2008 ที่มีไฟล์ข้อมูลขนาด 2GB บางส่วน แต่ไฟล์บันทึกมีขนาดเกิน 8GB ด้วยฐานข้อมูลก่อนปี 2551 ฉันสามารถใช้ 'บันทึกการสำรองข้อมูล' และTRUNCATE_ONLYตัวเลือก แต่ไม่สามารถใช้งานได้กับฐานข้อมูล 2008 และใหม่กว่า ฉันมีสคริปต์ที่ตัดทอนไฟล์บันทึก: USE [MyDatabase] GO ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT DBCC shrinkfile('MyDatabase_log', 1) ALTER DATABASE [MyDatabase] SET RECOVERY FULL WITH NO_WAIT GO สิ่งนี้จะตัดทอนไฟล์บันทึกอย่างสมบูรณ์ แต่คำถามของฉันคือ: สิ่งนี้มีผลกระทบต่อประสิทธิภาพหรือไม่ ฉันทำการสำรองข้อมูลเต็มรูปแบบสองครั้งต่อวันดังนั้นการบันทึกจึงไม่จำเป็นต้องมีความสำคัญเท่าที่ข้อมูลจะถูกนำไปใช้

3
ฉันจะบอกได้อย่างไรว่าแบบจำลองการกู้คืนฐานข้อมูล SQL ของฉันมีอะไร
มีคำสั่ง SQL ที่ฉันสามารถรันเพื่อกำหนดรูปแบบการกู้คืนของฐานข้อมูลของฉันได้หรือไม่? ฉันต้องการทราบว่าการกู้คืนเต็มหรือไม่

3
ยกเว้นผู้ประกอบการ vs NOT IN
ตัวEXCEPTดำเนินการถูกนำมาใช้ใน SQL Server 2005 แต่ความแตกต่างระหว่างNOT INและEXCEPTคืออะไร มันทำเช่นเดียวกัน? ฉันต้องการคำอธิบายง่ายๆพร้อมตัวอย่าง

2
กุญแจต่างประเทศสามารถทำให้เกิดการหยุดชะงักและขัดขวางการอ่าน SNAPSHOT ได้หรือไม่?
นี่เป็นคำถามติดตามจาก: /programming/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot-automatically ฉันยังคงมีสถานการณ์การหยุดชะงัก / หมดเวลาในโปรแกรมประยุกต์ ASP.NET READ_COMMITTED_SNAPSHOT ONเมื่อเรียกใช้รายงานขนาดใหญ่พร้อมกันถึงแม้ว่า ดังนั้นฉันมีสองคำถาม: ฉันจะตรวจสอบว่าภาพรวมธุรกรรมการแยกระดับการทำงานเป็นไปตามที่คาดไว้หรือไม่? ฉันสมมติว่าคีย์ต่างประเทศ (ในตารางของเว็บแอปพลิเคชันไปยังตารางรายงาน) มีหน้าที่รับผิดชอบการหยุดชะงัก ฉันพบบทความที่น่าสนใจนี้ : หมายเหตุ SQL Server จะได้รับการล็อกที่ใช้ร่วมกันเมื่อตรวจสอบคีย์ต่างประเทศแม้ว่าธุรกรรมกำลังใช้ snapshot ที่อ่านแล้ว (อ่านโดยใช้การกำหนดเวอร์ชันแถว) หรือระดับการแยกสแน็ปช็อต ระวังสิ่งนี้เมื่อตรวจสอบกราฟ deadlock จากทรานแซคชันเมื่อใช้ระดับการแยกทรานแซคชันเหล่านี้ หากคุณเห็นการล็อคที่ใช้ร่วมกันให้ตรวจสอบเพื่อดูว่าการล็อคนั้นเกิดขึ้นกับวัตถุที่อ้างอิงโดยคีย์ต่างประเทศหรือไม่ ฉันจะตรวจสอบได้อย่างไรว่า FK รับผิดชอบต่อสถานการณ์การหยุดชะงัก / หมดเวลาจริง ๆ หรือไม่นั่นหมายความว่าฉันสามารถลบกุญแจต่างประเทศเหล่านั้นเพื่อป้องกันการหยุดชะงัก (สิ่งที่จะเป็นความพยายามที่ยอมรับได้)? หมายเหตุ : ฉันแค่อ่านจากตารางที่ทำให้เกิดการหยุดชะงัก ความคิดใด ๆ ในหัวข้อนี้ชื่นชมอย่างมาก แก้ไข นี่คือการหยุดชะงักกราฟ บางทีใครบางคนอาจช่วยให้ฉันเข้าใจสิ่งที่ทำให้เกิดการหยุดชะงัก ดูเหมือนว่ามันจะเกิดขึ้นโดยไม่มีรายงานใด ๆ ที่ทำงานที่เกิดจากเว็บแอ็พพลิเคชันเท่านั้นเมื่อธุรกรรมสองรายการต้องการเขียนตารางเดียวกัน (หนึ่งการอัปเดตและหนึ่งการแทรกหนึ่งรายการ เหตุใดจึงมีการล็อกหน้าและวิธีเปิดใช้งานการล็อกแถวเท่านั้น? แทรก-SP …

2
การย้ายจาก SQL 2005 [SQL_Latin1_General_CP1_CI_AS] เป็น 2008 - ฉันจะสูญเสียคุณสมบัติใด ๆ โดยใช้ 'ความเข้ากันได้ย้อนหลัง' หรือไม่
เรากำลังย้ายจาก SQL 2005 [อินสแตนซ์และฐานข้อมูลมีการเปรียบเทียบSQL_Latin1_General_CP1_CI_AS] เป็น SQL 2008 [ซึ่งเป็นค่าเริ่มต้นไปยังLatin1_General_CI_AS] ฉันเสร็จสิ้นการติดตั้ง SQL 2008 R2 และใช้การLatin1_General_CI_ASเปรียบเทียบค่าเริ่มต้นแล้วโดยที่การคืนค่าฐานข้อมูลยังคงเปิดอยู่SQL_Latin1_General_CP1_CI_ASเปรียบเทียบกับการฟื้นฟูของฐานข้อมูลที่ยังคงอยู่ในปัญหาที่ยกเว้นเกิดขึ้น - ตาราง #temp ซึ่งใน Latin1_General_CI_ASขณะที่ฐานข้อมูลอยู่ SQL_Latin1_General_CP1_CI_ASและนี่คือที่ฉันอยู่ตอนนี้ - ฉันต้องการคำแนะนำเกี่ยวกับข้อผิดพลาดตอนนี้โปรด ในการติดตั้ง SQL 2008 R2 ฉันมีตัวเลือกในการติดตั้งให้ใช้โดย'SQL Collation, used for backwards compatibility'ที่ฉันมีตัวเลือกให้เลือกการเรียงหน้าเดียวกันกับฐานข้อมูลปี 2005:SQL_Latin1_General_CP1_CI_AS2005: สิ่งนี้จะทำให้ฉันไม่มีปัญหากับ #temp tables แต่มีข้อผิดพลาดหรือไม่? ฉันจะสูญเสียฟังก์ชันการทำงานหรือคุณลักษณะใด ๆ โดยไม่ใช้การจัดเรียง "ปัจจุบัน" ของ SQL 2008 หรือไม่ สิ่งที่เกี่ยวกับเมื่อเราย้าย (เช่นใน 2 ปี) จาก 2008 …

4
ฉันจะสำรองฐานข้อมูล SQL Server ขนาดใหญ่โดยไม่ส่งผลต่อประสิทธิภาพได้อย่างไร
เรามีรายงานคิวรีที่ทำงานช้าหรือหมดเวลาในตอนเช้าและงานเดียวที่ฉันเห็นว่าทำงานซึ่งฉันคิดว่าอาจส่งผลกระทบต่องานนี้คืองานสำรองฐานข้อมูลของเรา ฐานข้อมูลเองมีขนาดประมาณ 300GB และงานสำรองเริ่มต้นที่ 4:30 น. และยังไม่เสร็จจนกว่าจะถึงเวลา 7:00 น. ไวยากรณ์ปัจจุบันของงานสำรองของเราคือ: BACKUP DATABASE [DatabaseName] TO DISK = N'E:\Database Backups\DatabaseName.Bak' WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak', NOSKIP, STATS = 10, NOFORMAT E:\ เป็นพาร์ติชันบนเซิร์ฟเวอร์ที่เก็บทั้งฐานข้อมูลและสำรองฐานข้อมูล ควรสังเกตว่านี่เป็นเซิร์ฟเวอร์เสมือนไม่ใช่เซิร์ฟเวอร์แยกต่างหาก เราเริ่มได้รับการร้องเรียนเกี่ยวกับการชะลอตัวในระหว่างกระบวนการสำรองข้อมูลทันทีหลังจากที่เราเปลี่ยนเป็นเซิร์ฟเวอร์เสมือนดังนั้นฉันคิดว่าอาจเกี่ยวข้องกัน มีวิธีการเรียกใช้งานการสำรองข้อมูลนี้จึงไม่ส่งผลกระทบต่อประสิทธิภาพการค้นหาในขณะที่ทำงานอยู่หรือไม่ เรากำลังใช้ SQL Server 2005

3
ทำไมบางคนใส่ `ที่ 1 = 1` ในแบบสอบถาม
where 1 = 1ฉันมาข้ามมุมมองในฐานข้อมูลของเราวันนี้ที่คำสั่งแรกในข้อที่เป็น สิ่งนี้ไม่ควรกลับมาเป็นจริงสำหรับทุกระเบียนหรือไม่ ทำไมบางคนจะเขียนสิ่งนี้หากไม่ได้กรองระเบียนใด ๆ

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

2
SQL Server มีวิธีการรับรอบบันทึกธุรกรรมเมื่ออัปเดตคอลัมน์เป็น int
ฉันมีตาราง SQL Server 2005 ชื่อBRITTNEY_SPEARS_MARRIAGESและมีคอลัมน์ต่อไปนี้: MarrigeId tinyint, HusbandName varchar(500), MarrigeLength int ตอนนี้ฉันมีอีกโต๊ะ BRITTNEY_SPEARS_MARRIAGE_STORIES StoryId int, MarriageId tinyint, StoryText nvarchar(max) ปัญหาคือเราต้องการที่จะปรับปรุงMarrigeIdคอลัมน์ไปยังจากint tinyintเราแค่รู้สึกว่า Brittney กำลังจะมีการแต่งงานมากมายก่อนที่ทุกอย่างจะถูกพูดและทำ ตอนนี้BRITTNEY_SPEARS_MARRIAGE_STORIESตารางมีแถวอยู่ 18 ล้านแถว (เดี๋ยวก่อนผู้หญิงมีปัญหา) ดังนั้นเมื่อเราไปอัปเดตบันทึกธุรกรรมจะเต็มและกล่อง SQL Server ของเราก็ตาย เราจะแก้ไขสิ่งนี้ได้อย่างไร จะมีการพูดว่า "สวัสดี SQL Server ฉันจะอัปเดตคอลัมน์นี้และทำให้ใหญ่ขึ้นเชื่อฉันใน SQL Server นี้กรุณาอย่ากรอกบันทึกการทำธุรกรรมในขณะที่คุณพยายามตรวจสอบทุกอย่าง?"

3
ฉันสามารถย้ายแถวระหว่างพาร์ติชั่นโดยอัพเดตพาร์ติชั่นคีย์ได้ไหม?
ฉันคิดว่านี่เป็นคำถามที่ค่อนข้างง่าย แต่จริง ๆ แล้วฉันมีช่วงเวลาที่ยากลำบากในการหาคำตอบสำหรับเรื่องนี้ คำถาม: คุณสามารถย้ายแถวของข้อมูลภายในตารางที่แบ่งพาร์ติชันจากพาร์ติชันหนึ่งไปยังอีกพาร์ติชันโดยเพียงแค่การปรับปรุงคอลัมน์พาร์ติชันเพื่อที่จะข้ามขอบเขตพาร์ติชัน? ตัวอย่างเช่นถ้าฉันมีตารางที่มีพาร์ติชันคีย์: CREATE TABLE SampleTable ( SampleID INT PRIMARY KEY, SampleResults VARCHAR(100) NOT NULL, ) ด้วยฟังก์ชั่นพาร์ติชันที่จับคู่กับคีย์หลัก: CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS RANGE LEFT FOR VALUES (10000, 20000); ฉันสามารถย้ายแถวจากพาร์ติชันแรกไปยังพาร์ติชันที่สามได้โดยเปลี่ยน SampleID จาก 1 เป็น 500,000 (พูด) 500,000 หรือไม่ หมายเหตุ: ฉันติดแท็กเป็นทั้งเซิร์ฟเวอร์ sql 2005 และ 2008 เนื่องจากทั้งสองสนับสนุนการแบ่งพาร์ติชัน พวกเขาจัดการกับมันแตกต่างกันหรือไม่?

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