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

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

5
SQL: INSERT มีอะไรช้าลงถ้าไม่ใช่ CPU หรือ IO
เรามีฐานข้อมูลสำหรับผลิตภัณฑ์ที่เขียนหนัก เราเพิ่งซื้อเครื่องเซิร์ฟเวอร์ใหม่พร้อม SSD เพื่อช่วย ด้วยความประหลาดใจของเราการแทรกไม่เร็วกว่าบนเครื่องเก่าของเราที่มีการจัดเก็บช้ากว่ามาก ในระหว่างการเปรียบเทียบเราสังเกตเห็นว่าอัตรา IO ที่แสดงโดยกระบวนการ SQL Server นั้นต่ำมาก ตัวอย่างเช่นฉันรันสคริปต์ที่พบในหน้านี้ยกเว้นว่าฉันได้เพิ่ม BEGIN TRAN และ COMMIT รอบลูป ที่ดีที่สุดฉันจะเห็นการใช้งานดิสก์ถึง 7Mb / s ในขณะที่ CPU แทบจะไม่ได้สัมผัส 5% เซิร์ฟเวอร์มีการติดตั้ง 64Gb และใช้ 10 เวลาการทำงานทั้งหมดคือ 2 นาที 15 วินาทีสำหรับการโทรครั้งแรกจนถึงประมาณ 1 นาทีสำหรับการโทรครั้งต่อไป ฐานข้อมูลเป็นการกู้คืนอย่างง่ายและไม่ได้ใช้งานในระหว่างการทดสอบ ฉันวางโต๊ะระหว่างการโทรแต่ละครั้ง ทำไมสคริปต์ง่าย ๆ นี้ถึงช้าจัง ฮาร์ดแวร์แทบจะไม่มีการใช้เลย ทั้งเครื่องมือการเปรียบเทียบดิสก์เฉพาะและ SQLIO ระบุว่า SSD ทำงานอย่างถูกต้องด้วยความเร็วสูงกว่า 500Mb / s …

4
ฐานข้อมูล SQL Server บน SSD - มีประโยชน์กับไฟล์แยกกันสำหรับทุกตารางหรือไม่?
ฉันกำลังสร้างฐานข้อมูลที่จะมีประมาณ 30 ตารางโดยทุกตารางมีจำนวนแถวหลายสิบล้านแถวและแต่ละตารางมีคอลัมน์สำคัญเพียงคอลัมน์เดียวและคอลัมน์คีย์หลัก / หลักต่างประเทศเพื่อเพิ่มประสิทธิภาพการสืบค้นสูงสุด อัพเดตและการแทรกและใช้ประโยชน์อย่างมากของดัชนีคลัสเตอร์ ตารางสองตารางจะมีข้อมูลที่เป็นข้อความที่มีความยาวผันแปรโดยหนึ่งในนั้นมีหลายร้อยล้านแถว แต่ที่เหลือจะมีเพียงข้อมูลตัวเลข เมื่อฉันต้องการบีบประสิทธิภาพออกมาจากฮาร์ดแวร์ที่มีอยู่ (เช่น RAM 64GB, SSD ที่เร็วมากและ 16 คอร์) ฉันคิดว่าจะอนุญาตให้แต่ละตารางมีไฟล์ของตัวเองได้ ฉันกำลังเข้าร่วมใน 2, 3, 4, 5 หรือมากกว่าตารางแต่ละตารางจะถูกอ่านโดยใช้เธรดแยกต่างหากและโครงสร้างของแต่ละไฟล์จะได้รับการจัดตำแหน่งอย่างใกล้ชิดกับเนื้อหาของตารางซึ่งหวังว่าจะช่วยลดการกระจายตัวและทำให้เร็วขึ้น สำหรับ SQL Server เพื่อเพิ่มเนื้อหาของตารางใดก็ตาม หนึ่งข้อแม้ผมติดอยู่ใน SQL Server 2008 R2 Web Edition ซึ่งหมายความว่าฉันไม่สามารถใช้การแบ่งพาร์ติชันในแนวนอนอัตโนมัติซึ่งเป็นกฎที่ออกมาเป็นการยกระดับประสิทธิภาพ จะใช้หนึ่งไฟล์ต่อตารางจริง ๆ แล้วเพิ่มประสิทธิภาพหรือไม่หรือฉันกำลังมองหาคุณลักษณะเอ็นจิน SQL Server ในตัวที่จะทำให้ซ้ำซ้อน? ข้อที่สองถ้าใช้ไฟล์หนึ่งไฟล์ต่อหนึ่งตารางจะได้เปรียบทำไมcreate tableฉันถึงให้ตัวเลือกในการจัดสรรตารางให้กับกลุ่มไฟล์และไม่ใช่เฉพาะไฟล์โลจิคัล? สิ่งนี้จะทำให้ฉันต้องสร้างกลุ่มไฟล์แยกต่างหากสำหรับทุกไฟล์ในสถานการณ์ของฉันซึ่งแนะนำให้ฉันทราบว่าบางที SQL Server อาจไม่ได้มองเห็นถึงข้อดีที่ฉันสมมติว่าจะมาจากการทำสิ่งที่ฉันเสนอ

4
แสดงแถวที่แตกต่างระหว่างสองตารางหรือคิวรีได้อย่างง่ายดาย
ลองนึกภาพคุณมีสองตาราง / แบบสอบถามที่แตกต่างกันที่ควรจะมี / ส่งคืนข้อมูลที่เหมือนกัน คุณต้องการตรวจสอบสิ่งนี้ วิธีง่ายๆในการแสดงแถวที่ไม่ตรงกันจากแต่ละตารางเหมือนกับตัวอย่างด้านล่างคือการเปรียบเทียบทุกคอลัมน์ สมมติว่ามี 30 คอลัมน์ในตารางซึ่งหลายแห่งเป็น NULLable เมื่อไม่มี PK หรืออาจมีการทำซ้ำต่อ PK การเข้าร่วมในคอลัมน์ PK เพียงอย่างเดียวไม่เพียงพอและจะเป็นความหายนะที่จะต้องทำการเข้าร่วมแบบเต็มโดยมีเงื่อนไขการเข้าร่วม 30 รายการที่จัดการ NULL ได้อย่างเหมาะสมรวมถึงเงื่อนไขที่น่ารังเกียจ เพื่อยกเว้นแถวที่ตรงกัน โดยปกติแล้วคือเมื่อฉันเขียนแบบสอบถามใหม่กับข้อมูลที่ไม่มีการ unscrbed หรือไม่เข้าใจว่าปัญหานั้นเลวร้ายที่สุดและความน่าจะเป็นของ PK ที่มีอยู่ในเชิงตรรกะนั้นต่ำมาก ฉันทำสองวิธีที่แตกต่างกันเพื่อแก้ไขปัญหาแล้วเปรียบเทียบผลลัพธ์ของพวกเขาความแตกต่างที่เน้นกรณีพิเศษในข้อมูลที่ฉันไม่ทราบ ผลลัพธ์ต้องมีลักษณะดังนี้: Which Col1 Col2 Col3 ... Col30 ------ ------ ------ ------ ------ TableA Cat 27 86 -- mismatch TableB Cat 27 …

6
วิธีการป้องกันไม่ให้บันทึกธุรกรรมเต็มระหว่างการจัดระเบียบดัชนีใหม่
เรามีหลายเครื่องที่เราได้จัดสรรขนาดของบันทึกการทำธุรกรรมไว้ที่ 50GB ขนาดของตารางที่ฉันพยายามจัดระเบียบใหม่คือ 55 - 60 gb แต่จะเพิ่มขึ้นอย่างต่อเนื่อง เหตุผลหลักที่ฉันต้องการจัดระเบียบใหม่คือการเรียกคืนพื้นที่และผลประโยชน์ใด ๆ เนื่องจากเป็นโบนัสเพิ่มเติม ระดับการแตกแฟรกเมนต์ของตารางคือ 30 - 35% ในเครื่องเหล่านี้บางเครื่องฉันได้รับข้อผิดพลาด "transaction log full" และการจัดระเบียบใหม่ล้มเหลว ขนาดบันทึกธุรกรรมสูงสุดถึง 48gb เป็นวิธีที่ดีในการตอบโต้สิ่งนี้คืออะไร? เราไม่ได้เปิดการเพิ่มอัตโนมัติและฉันลังเลที่จะทำเช่นนั้น ฉันสามารถเพิ่มขนาดบันทึกเป็นค่าที่มากขึ้น แต่เมื่อขนาดตารางเพิ่มขึ้นในอนาคตค่าอาจไม่เพียงพอ นอกจากนี้ยังเอาชนะวัตถุประสงค์ในการจัดระเบียบใหม่เพื่อเรียกคืนพื้นที่ถ้าฉันจะเพิ่มขนาดบันทึกอย่างเท่าเทียมกัน ความคิดเห็นใด ๆ เกี่ยวกับวิธีที่ฉันสามารถตอบโต้เรื่องนี้ได้อย่างมีประสิทธิภาพ การใช้โหมดแบบกลุ่มไม่ใช่ตัวเลือกเนื่องจากการสูญเสียข้อมูลไม่เป็นที่ยอมรับ

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 สิ่งนี้จะตัดทอนไฟล์บันทึกอย่างสมบูรณ์ แต่คำถามของฉันคือ: สิ่งนี้มีผลกระทบต่อประสิทธิภาพหรือไม่ ฉันทำการสำรองข้อมูลเต็มรูปแบบสองครั้งต่อวันดังนั้นการบันทึกจึงไม่จำเป็นต้องมีความสำคัญเท่าที่ข้อมูลจะถูกนำไปใช้

4
ตัวกำหนดเวลางานสำหรับ SQL Server Express
ฉันมีแอพ ASP.NET MVC ซึ่งทำงานกับฐานข้อมูลภายใต้รุ่น SQL Server 2008 R2 Express ไม่จำเป็นต้องดำเนินการตามปกติในการอัพเดตบางระเบียนในฐานข้อมูล น่าเสียดายที่ Express Edition ไม่มีเอเจนต์ SQL คุณจะแนะนำวิธีใด


4
ทำไมฉันไม่สามารถใช้ตัวแปรใน T-SQL เหมือนที่ฉันจินตนาการได้
ยกโทษให้ฉันฉันเป็นนักพัฒนาที่ได้ย้ายไปยังโลกของ SQL ฉันคิดว่าฉันสามารถปรับปรุง SQL ด้วยการเพิ่มตัวแปร แต่มันไม่ทำงานเหมือนที่ฉันคาดไว้ มีใครบอกฉันได้ไหมว่าทำไมสิ่งนี้ถึงใช้งานไม่ได้ ฉันไม่ต้องการทำงานฉันต้องการทราบเหตุผลว่าทำไมมันถึงใช้งานไม่ได้ฉันคิดว่ามันควรจะเป็นเพราะฉันแน่ใจว่ามีเหตุผลที่ดี DECLARE @DatabaseName varchar(150) SET @DatabaseName = 'MyAmazingDatabaseName' CREATE DATABASE @DatabaseName GO USE @DatabaseName GO

1
การใช้ DISTINCT เป็นคำใบ้ในแบบสอบถามย่อยมีประโยชน์หรือไม่
การเพิ่มDISTINCTในตัวอย่างต่อไปนี้มีผลกระทบต่อเวลาทำงานของแบบสอบถามหรือไม่ ควรใช้เป็นคำใบ้ในบางครั้งหรือไม่? SELECT * FROM A WHERE A.SomeColumn IN (SELECT DISTINCT B.SomeColumn FROM B)

7
จัดตารางเวลารายวันเป็น [วันที่เริ่ม; วันที่สิ้นสุด] ช่วงเวลาพร้อมรายการวันในสัปดาห์
ฉันต้องการแปลงข้อมูลระหว่างสองระบบ ระบบแรกจัดเก็บตารางเวลาเป็นรายการธรรมดาของวันที่ แต่ละวันที่รวมอยู่ในกำหนดการคือหนึ่งแถว อาจมีช่องว่างต่าง ๆ ในลำดับของวันที่ (วันหยุดสุดสัปดาห์วันหยุดราชการและหยุดอีกต่อไปบางวันของสัปดาห์อาจไม่รวมอยู่ในตาราง) ไม่มีช่องว่างเลยแม้แต่วันหยุดสุดสัปดาห์ก็สามารถรวม กำหนดการอาจนานถึง 2 ปี โดยปกติจะใช้เวลาไม่กี่สัปดาห์ นี่คือตัวอย่างง่ายๆของตารางที่ครอบคลุมสองสัปดาห์ยกเว้นวันหยุดสุดสัปดาห์ (มีตัวอย่างที่ซับซ้อนมากขึ้นในสคริปต์ด้านล่าง): +----+------------+------------+---------+--------+ | ID | ContractID | dt | dowChar | dowInt | +----+------------+------------+---------+--------+ | 10 | 1 | 2016-05-02 | Mon | 2 | | 11 | 1 | 2016-05-03 | Tue | 3 | | …

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
ใช้ * tables * เป็นพารามิเตอร์ที่กำหนดค่าตาราง (TVP)
MS SQL 2008 รองรับ TVP: คุณลักษณะที่มีประโยชน์สำหรับการอัปโหลดข้อมูลจำนวนมากไปยังกระบวนการดำเนินการที่จัดเก็บไว้เพื่อการประมวลผล แทนที่จะสร้างประเภทที่ผู้ใช้กำหนดสามารถใช้ประโยชน์จากนิยามตารางที่มีอยู่ได้หรือไม่? ตัวอย่างเช่นเป็นไปได้หรือไม่ที่จะสร้างขั้นตอนการจัดเก็บด้วยลายเซ็นต่อไปนี้? CREATE PROCEDURE usp_InsertProductionLocation @TVP **LocationTable** READONLY เอกสารดูเหมือนว่าจะแนะนำว่าเป็นไปไม่ได้ รหัสตัวอย่าง /* Sample code from: http://msdn.microsoft.com/en-us/library/bb510489.aspx */ USE AdventureWorks2008R2; GO /* Create a table type. */ CREATE TYPE LocationTableType AS TABLE ( LocationName VARCHAR(50) , CostRate INT ); GO /* Create a procedure to receive …

1
เป็นไปได้หรือไม่ที่จะสร้างนามแฝงหรือคำเหมือนสำหรับฐานข้อมูล
เป็นไปได้หรือไม่ที่จะสร้างนามแฝงฐานข้อมูลหรือคำเหมือน? สิ่งที่ฉันหวังว่าจะสามารถทำได้คือ NewDatabaseName เป็นนามแฝงเป็น OldDatabaseName เพื่อป้องกันไม่ให้ต้องเขียนรหัสเป็นตัน Backstory: ฉันได้รับการติดต่อจากลูกค้าด้วยปัญหาที่เกิดขึ้นด้วยตนเองที่ไร้สาระ พวกเขามีแอปพลิเคชันของบุคคลที่สามที่มีเซิร์ฟเวอร์ SQL ส่วนหลัง ผู้ใช้งานได้เขียนรายงานที่กำหนดเองกับฐานข้อมูลนี้โดยใช้ Visual Basic พร้อมกับข้อมูลการเชื่อมต่อฐานข้อมูลทั้งหมดที่เขียนโค้ดไว้ในโปรแกรมของพวกเขา เมื่อเร็ว ๆ นี้ซอฟต์แวร์ของบุคคลที่สามได้เปลี่ยนชื่อฐานข้อมูล ตอนนี้รายงาน EXE ทั้งหมดล้มเหลว โอ้พวกเขาไม่มีซอร์สโค้ดมากมายเช่นกัน ฉันกลั้นหัวเราะและพูดว่าฉันจะเห็นสิ่งที่ฉันทำได้

3
กำหนดช่วงแบบไดนามิกในมิติข้อมูล
ฉันมีปัญหาที่ฉันเผชิญทุกครั้งที่ฉันตัดสินใจที่จะสร้างคิวบ์และฉันยังไม่พบวิธีที่จะเอาชนะมันได้ ปัญหาคือวิธีการอนุญาตให้ผู้ใช้กำหนดช่วงของสิ่งต่าง ๆ โดยอัตโนมัติโดยไม่จำเป็นต้อง hardcode พวกเขาในมิติ ฉันจะอธิบายปัญหาของฉันในตัวอย่าง ฉันมีตารางชื่อลูกค้า : นี่คือข้อมูลในตาราง: ฉันต้องการแสดงข้อมูลในรูปแบบ pivot และจัดกลุ่มเงินเดือนและอายุในช่วงที่กำหนดดังนี้: ฉันเขียนสคริปต์นี้และกำหนดช่วง: SELECT [CustId] ,[CustName] ,[Age] ,[Salary] ,[SalaryRange] = case when cast(salary as float) <= 500 then '0 - 500' when cast(salary as float) between 501 and 1000 then '501 - 1000' when cast(salary as float) between 1001 …

2
ทำไมฉันไม่สามารถใช้ NEWSEQUENTIALID () เป็นค่าเริ่มต้นสำหรับคอลัมน์ของฉันได้
ฉันกำลังพยายามสร้างตารางใน Management Studio และหลังจากอ่านเกี่ยวกับNEWSEQUENTIALID()ฟังก์ชั่นใหม่ (จาก SQL 2005 เป็นต้นไป) คิดว่าฉันจะเลิกใช้แล้ว นี่คือสิ่งที่ฉันทำ: แต่มันไม่ให้ฉัน ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ: 'FormTemplate (Forms)' table - Error validating the default for column 'FormTemplateId'. ฉันไม่มีเคล็ดลับที่นี่หรือไม่ ฉันใช้ SQL Server 2008 R2 แน่นอน

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