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

Microsoft SQL Server ทุกรุ่น (ไม่ใช่ MySQL) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น sql-server-2016 เนื่องจากมักเกี่ยวข้องกับคำถาม

1
ระบุเหตุการณ์การเติบโตของไฟล์
ฉันค้นพบฐานข้อมูลจำนวนมากในแฟ้มสะสมผลงานของฉันที่สร้างขึ้นด้วยการตั้งค่า autogrow เริ่มต้น (เพิ่มขึ้น 1 MB หรือ 10%) ที่ขยายเป็นระยะเวลานาน หากฉันต้องการทราบจำนวนของการแตกแฟรกเมนต์ภายนอกสำหรับไฟล์ DB แต่ละไฟล์ฉันสามารถรับข้อมูลเมตาได้กี่ครั้งที่ไฟล์ DB ได้รับการแก้ไขในขนาด (โดย autogrow หรือด้วยตนเอง)? เพื่อชี้แจงฉันจะได้รับจาก metadata ประวัติของการแก้ไขไฟล์ DB สำหรับอายุการใช้งานของ DB ไม่ใช่แค่ตั้งแต่การรีสตาร์ทอินสแตนซ์?

2
วิธีที่ดีที่สุดในการจัดเรียงข้อมูล / กระชับฐานข้อมูลเพื่อวัตถุประสงค์ในการเก็บถาวร
เรามีอินสแตนซ์ของ SQL Server ที่ใช้สำหรับการเก็บถาวรอีเมล (ได้รับความอนุเคราะห์จากแพ็คเกจการเก็บถาวรของบุคคลที่สาม) บ่อยครั้งซอฟต์แวร์จะถูกนำไปวางในฐานข้อมูลเปล่าใหม่ เราเคยทำมาทุกไตรมาสในอดีต แต่เราต้องการทำรายเดือนในตอนนี้ จำนวนข้อมูลที่ถูกเก็บถาวรอยู่ที่ประมาณ 15 - 20 GB ต่อเดือนและข้อมูลจำนวนมากอยู่ในตารางเพียงไม่กี่ตาราง (โดยปกติคือ 2 - 4) เมื่อเราหมุนไปยังฐานข้อมูลใหม่แล้วฐานข้อมูลเก่าจะถูกใช้บนพื้นฐานแบบอ่านอย่างเดียว สิ่งที่ฉันต้องการจะทำคือปรับให้เป็นไฟล์ข้อมูลที่ดีและแน่นหนาโดยมีตาราง / ดัชนีทั้งหมดต่อเนื่องกันและมีตัวประกอบการเติมสูงมากและไม่มีพื้นที่ว่างที่ท้ายแฟ้มข้อมูล นอกจากนี้เรากำลังใช้ Standard Edition บนเซิร์ฟเวอร์นี้ด้วยข้อ จำกัด ทั้งหมดที่บอกเป็นนัย (ไม่เช่นนั้นฉันจะใช้การบีบอัดข้อมูลอยู่แล้ว) ความเป็นไปได้บางอย่างที่ฉันสามารถนึกได้: REBUILD / REORGANIZE ดัชนี DBCC SHRINKFILE (โอเคนี่ไม่ใช่ตัวเลือกที่สมเหตุสมผลเนื่องจาก DBCC SHRINKFILE จะแยกส่วนปัสสาวะออกจากสิ่งที่มันสัมผัส แต่ฉันรวมไว้เพื่อความสมบูรณ์) สร้างฐานข้อมูลใหม่โดยอัตโนมัติปิดสถานะ สคริปต์และสร้างตารางทั้งหมดจากฐานข้อมูลต้นฉบับอีกครั้ง ใช้ bcp เพื่อส่งออก / นำเข้าข้อมูลไปยังฐานข้อมูลใหม่ตามลำดับคีย์ - คลัสเตอร์ …

2
RAM ที่เพิ่มขึ้นประสิทธิภาพที่แย่ลง
ติดตั้ง: Windows Server 2008 R2 SQL Server 2008 R2 SP1 RAM 240GB TempDB เป็นไฟล์ข้อมูลขนาด 8x16GB โดยไม่มีการเติบโตอัตโนมัติ (รวม 128GB) เซิร์ฟเวอร์ทางกายภาพ / เซิร์ฟเวอร์แบบเอกเทศ เซิร์ฟเวอร์นี้ใช้สำหรับการประมวลผล ETL เราเพิ่งติดตั้ง RAM เพิ่มเติมในเซิร์ฟเวอร์นี้รวม 240GB RAM บริการ SQL Server เป็นสิ่งเดียวที่ทำงานจริง หน่วยความจำแสดงผลได้ดีใน BIOS, OpenManage และ Windows ถ้าฉันกำหนดค่า SQL Server ให้ใช้หน่วยความจำต่ำสุด / สูงสุด 70 / 100GB เราก็ไม่มีปัญหา อย่างไรก็ตามเมื่อฉันเพิ่มเป็น 120/150GB ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันเรียกใช้กระบวนการ …

5
กรองชุดใหญ่อย่างมีประสิทธิภาพด้วยการแยก
สมมติว่าฉันมีตารางเดียว CREATE TABLE Ticket ( TicketId int NOT NULL, InsertDateTime datetime NOT NULL, SiteId int NOT NULL, StatusId tinyint NOT NULL, AssignedId int NULL, ReportedById int NOT NULL, CategoryId int NULL ); ในตัวอย่างนี้TicketIdคือคีย์หลัก ฉันต้องการให้ผู้ใช้งานสามารถสร้างข้อความค้นหา "เฉพาะกิจบางส่วน" ได้จากตารางนี้ ฉันพูดบางส่วนเพราะบางส่วนของแบบสอบถามจะได้รับการแก้ไขเสมอ: แบบสอบถามจะเสมอทำการกรองช่วงบน InsertDateTime แบบสอบถามจะเสมอ ORDER BY InsertDateTime DESC แบบสอบถามจะหน้าผลลัพธ์ ผู้ใช้สามารถเลือกที่จะกรองคอลัมน์อื่นใดก็ได้ พวกเขาสามารถกรองไม่มีใครคนหนึ่งหรือหลายคน และสำหรับแต่ละคอลัมน์ผู้ใช้อาจเลือกจากชุดของค่าที่จะนำไปใช้เป็นความแตกแยก ตัวอย่างเช่น: SELECT …

2
ณ จุดใดการมีดัชนีมีประสิทธิภาพ
ฉันพบทรัพยากรจำนวนมากที่กล่าวถึงว่าการเพิ่มดัชนีในตารางทำให้การค้นหาเร็วขึ้นและแทรกช้าลง แต่เฉพาะในกรณีที่ตารางมีขนาดใหญ่ สิ่งนี้สร้างการแลกเปลี่ยนซึ่งเป็นการตัดสินใจออกแบบ แต่ควรมีขนาดตารางโดยประมาณก่อนที่การใช้ดัชนีจะไร้สาระ (ตัวอย่างเช่น 10 แถวอาจเป็นวิธีที่ต่ำกว่าขีด จำกัด นั้น) มีใครรู้บ้างไหมว่าข้อ จำกัด นี้จะอยู่ที่ใดหรือรู้ถึงทรัพยากรที่ชี้ให้ฉันไปในทิศทางที่ถูกต้องหรือไม่?

2
การทำธุรกรรมและลองจับในงาน SQL Server
เรามีการดำเนินงาน DML ในแต่ละขั้นตอนของงาน SQL Server เพื่อให้แน่ใจว่าการปรับปรุง / แทรกจะถูกรีดกลับในกรณีอะไรผิดพลาดผมได้ห่อการปรับเปลี่ยนข้อมูลของแต่ละขั้นตอนในTRY CATCHและTRANSACTIONบล็อก: BEGIN TRY BEGIN TRANSACTION [[INSERT/update statements]] ... IF @@TRANCOUNT > 0 BEGIN COMMIT TRANSACTION PRINT 'Successful.' END END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage IF …

3
SQL Server Leaked ธุรกรรม
ฉันมีฐานข้อมูลที่เข้าถึงได้โดยไคลเอนต์ประมาณ 50 คนผ่าน TDS ผ่าน TCP ซึ่งดูเหมือนจะไม่ปล่อยพื้นที่บันทึก จำนวนกระบวนการอยู่รอบ 50 ที่คาดไว้และบางกระบวนการค่อนข้างยาวนาน (> 120 วัน) ขณะนี้ฐานข้อมูลมีพื้นที่บันทึก 40 gb (มีเพียง 14 gb data), 39 gb ฟรี เนื่องจากข้อ จำกัด ด้านพื้นที่บนไดรฟ์ฉันต้องการลดขนาดให้เหมาะสมกว่า (10gb-ish) เมื่อฉันดำเนินการDBCC SHRINKFILE('db_log', 10000)มันจะส่งคืนข้อผิดพลาดที่การใช้งานสิ้นสุดของบันทึก เพื่อให้สามารถเข้าถึงจุดสิ้นสุดของบันทึกได้ฟรีฉันพยายามที่จะวางฐานข้อมูลในโหมดผู้ใช้คนเดียวโดยทำดังนี้ ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO ALTER DATABASE db SET MULTI_USER GO แต่สคริปต์ส่งคืนข้อความต่อไปนี้ซ้ำหลายร้อยครั้ง: Nonqualified transactions are …

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

2
คุณสมบัติเอกสาร SQL Server Filetable
ฉันใช้ SQL Server 2012 FileTableในการจัดเก็บเอกสารและค้นหาพวกเขาด้วยความหมายของการค้นหา ฉันสงสัยว่ามีวิธีที่จะแสดงรายการคุณสมบัติของเอกสารทั้งหมด (ข้อมูลเมตา) หรือไม่ มีวิธีให้ดัชนีการค้นหาแบบข้อความและค้นหาคุณสมบัติเอกสาร ฉันสามารถสร้างรายการคุณสมบัติดัชนีเซิร์ฟเวอร์ SQL ด้วยคำสั่งต่อไปนี้: SELECT * FROM sys.registered_search_properties; ฉันยังสามารถขยายรายการนี้กับ SQL หรือใช้โปรแกรม สิ่งที่ฉันไม่พบเป็นวิธีการแสดงรายการข้อมูลจริง สิ่งที่ฉันกำลังมองหาคือรายการที่ชอบ: ผู้แต่ง : Ruud van de Beeten หัวข้อ : เอกสารทดสอบ คุณสมบัติที่กำหนดเอง : ค่าที่กำหนดเอง ใครช่วยชี้ฉันในทิศทางที่ถูกต้องได้ไหม แก้ไข : Bob Beauchemin สร้างตั๋วอธิบายปัญหาของฉัน เนื่องจาก DMV ไม่ได้แสดงรายการค่าคุณสมบัติฉันไม่สามารถใช้ในโครงการของฉันได้ ฉันลงเอยด้วยการใช้ C # เพื่อแสดงรายการคุณสมบัติที่กำหนดเองด้วยวัตถุOleDocumentProperties วัตถุนี้สามารถอ่านคุณสมบัติจากเอกสาร Office ฉันจะดูคำถามนี้ต่อไปโดยหวังว่าจะได้ทางออกที่ดีกว่า

1
กลุ่มความพร้อมใช้งานสามารถให้การเข้าแทนที่ที่ราบรื่น (โดยไม่มีความล้มเหลวในการค้นหา)?
ฉันได้ทำการทดสอบคุณสมบัติกลุ่มความพร้อมใช้งานใน SQL Server 2012 และกำลังค้นหาว่ามีเวลาหยุดทำงานประมาณ 15 วินาทีเมื่อเซิร์ฟเวอร์หลักล้มเหลวไปยังเซิร์ฟเวอร์รอง แบบสอบถาม SQL ทั้งหมดที่ดำเนินการในช่วงเวลานี้จะล้มเหลวจนกว่าการเปลี่ยนแปลงล้มเหลวจะเสร็จสมบูรณ์ มีวิธีใดที่จะทำให้สิ่งนี้ลดลงเป็น 0 วินาทีและป้องกันไม่ให้แบบสอบถามล้มเหลวในระหว่างการเปลี่ยนสถานะการเฟลโอเวอร์? กล่าวอีกนัยหนึ่งมีวิธีที่จะทำให้คิวรีใด ๆ ที่ทำงานในระหว่างที่ล้มเหลวในการเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์หลักแทนที่จะล้มเหลว ... และมีวิธีใดที่จะได้รับการเชื่อมต่อฐานข้อมูลใหม่เพื่อเชื่อมต่อกับเซิร์ฟเวอร์รองทันทีแทนที่จะล้มเหลว เชื่อมต่อระหว่างการเปลี่ยน Failover หรือไม่? ปัจจุบันฉันมีเซิร์ฟเวอร์ 2 ตัวที่ตั้งค่าไว้ในกลุ่มความพร้อมใช้งาน

3
กู้คืนการสำรองข้อมูลล้มเหลว - ไฟล์ 'Db' ไม่สามารถกู้คืนเป็น '{…} .mdf' ใช้ WITH MOVE เพื่อระบุตำแหน่งที่ถูกต้องสำหรับไฟล์
ฉันได้รับข้อผิดพลาดต่อไปนี้พยายามกู้คืนโดยใช้คำสั่งกู้คืนในไฟล์สำรองข้อมูลที่ฉันได้รับจากลูกค้า เรียกคืนฐานข้อมูล SFDB จาก DISK = N'C: \ Backup \ Backup.bak ' มีความคิดเกี่ยวกับสิ่งที่ฉันสามารถทำได้เพื่อแก้ไขสิ่งนี้หรือไม่? มันกำลังมองหา mdf ดังนั้นฉันจึงสามารถสรุปได้ว่าไฟล์สำรองที่ฉันมีคือการสำรองข้อมูลที่เพิ่มขึ้นไม่ใช่การสำรองข้อมูลทั้งหมดและนั่นคือสาเหตุที่ทำไมจึงมองหา mdf ฉันไม่แน่ใจว่า 1) พวกเขาให้ข้อมูลทั้งหมด (ทั้งฐานข้อมูล) หรือ 2) ฉันมีข้อมูลที่ถูกต้อง - และฉันสามารถกู้คืนได้ด้วยคำสั่ง T-SQL ที่ถูกต้อง - ฉันไม่รู้วิธีการ ความช่วยเหลือชื่นชม Msg 5133, Level 16, State 1, Line 2 Directory lookup for the file "D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db.mdf" failed with …

3
ปิดใช้งานการบันทึกในบางตาราง
ฉันใช้ SQL Server 2005 ฉันมีสองตารางที่มีข้อมูลรวม ข้อมูลกำลังได้รับการปรับปรุงอย่างต่อเนื่องสร้างข้อมูลบันทึกเกือบ 5GB ต่อวัน (นั่นใหญ่กว่าฐานข้อมูลทั้งหมด!) ฉันต้องการปิดการใช้งานการบันทึกในตารางเหล่านี้เนื่องจากการย้อนกลับไม่จำเป็นจริงๆ อย่างไรก็ตามฉันต้องการที่จะเข้าสู่ระบบในตารางอื่น ๆ ในฐานข้อมูล เป็นไปได้หรือไม่ที่จะปิดการใช้งานการบันทึกในตารางบางอย่างภายในฐานข้อมูล? หากไม่มีฉันสามารถวางสองตารางในสคีมาเดียวกันจากนั้นปิดใช้งานการบันทึกในสคีมาหรือไม่ เป็นตัวเลือกเดียวที่จะย้ายสองตารางไปยังฐานข้อมูลแยกต่างหากและปิดการใช้งานการบันทึกที่นั่นหรือไม่ อัปเดต: ฉันเดาว่าฉันจะอธิบายว่าทำไมฉันจึงไม่จำเป็นต้องบันทึกกิจกรรมบนตารางเหล่านี้ ตารางทั้งสองนั้นเต็มไปด้วยข้อมูล GPS ดังนั้นจึงมีขนาดค่อนข้างใหญ่ ตารางแรกคือการจับตำแหน่งดิบจากหกตาราง Android ในเขตข้อมูล ข้อมูลใหม่จากแท็บเล็ตแต่ละเครื่องมาในทุก ๆ 5-10 วินาที ข้อมูลนั้นจะถูกรวมเป็น locationA, locationB, travelTime เป้าหมายคือเพื่อให้มีเวลาในการเดินทางสั้นที่สุดระหว่างสถานที่ทั้งหมดโดยอิงจากข้อมูลการขับขี่จริง ข้อมูลนี้ใช้สำหรับเมืองเล็ก ๆ เท่านั้นและแม่นยำถึงทศนิยมสี่ตำแหน่งเท่านั้นจึงสามารถจัดการได้ อย่างไรก็ตามเมื่อข้อมูลดิบใหม่เข้ามามีเวลาเดินทางช้าลงซึ่งจำเป็นต้องได้รับการอัปเดตและข้อมูลใหม่ที่ต้องถูกแทรก เมื่อรวบรวมข้อมูลดิบแล้วข้อมูลจะถูกลบทิ้ง เราจะไม่ย้อนกลับไปสู่เวลาเดินทางอีกต่อไปดังนั้นนี่คือเหตุผลที่การย้อนกลับไม่สำคัญมากในตารางเหล่านี้

2
ฉันจะเขียน SQL แบบพกพาที่อ้างถึงเซิร์ฟเวอร์ที่เชื่อมโยงได้อย่างไร
ฉันมีขั้นตอนการจัดเก็บที่อ้างอิงถึงเซิร์ฟเวอร์ที่เชื่อมโยง ในหลาย ๆ ที่ตลอดกระบวนการฉันมีบางอย่างดังต่อไปนี้: INSERT INTO [TableName] (...Columns...) SELECT ...Columns... FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName] WHERE TableNameID = @TableNameID ขั้นตอนนี้มีอยู่ในสภาพแวดล้อมการพัฒนาของฉันสภาพแวดล้อมการทดสอบและสภาพแวดล้อมแบบสด ปัญหาคือแต่ละสำเนาของโพรซีเดอร์นั้นแตกต่างกันอย่างละเอียดเนื่องจากชื่อเซิร์ฟเวอร์แตกต่างกันสำหรับแต่ละสภาพแวดล้อม สิ่งนี้ทำให้การจัดการการปรับใช้การอัปเดตสคริปต์ลำบาก มีวิธีทำให้โพรซีเดอร์แบบพกพาเพื่อให้แต่ละสภาพแวดล้อมสามารถรันเวอร์ชันที่เหมือนกันได้หรือไม่? ถ้าไม่มีอะไรที่ฉันสามารถทำได้เพื่อให้การปรับใช้สคริปต์มีแนวโน้มที่จะเกิดข้อผิดพลาด / ข้อผิดพลาดน้อยลง

4
สิ่งที่สามารถเพิ่มความเร็วคิวรีแบบสอบถาม SQL?
เมื่อทำการสอบถาม SQL นับ (รวม) สิ่งที่สามารถเพิ่มความเร็วเวลาการดำเนินการในระบบฐานข้อมูล 3 เหล่านี้? ฉันแน่ใจว่าหลายสิ่งหลายอย่างสามารถเร่งความเร็วได้ (ฮาร์ดแวร์สำหรับหนึ่งชิ้น) แต่ฉันเพิ่งเป็นสามเณร DBA ดังนั้นฉันแน่ใจว่าฉันจะได้รับคำตอบที่นี่ ฉันโยกย้ายประมาณ 157 ล้านแถวไปยังฐานข้อมูล SQL Server และแบบสอบถามนี้ใช้เวลานาน แต่ในฐานข้อมูล Netezza ต้นทางของฉันมันใช้เวลาไม่กี่วินาที ตัวอย่างเช่น: เนเตซซ่า 6: SELECT COUNT(*) FROM DATABASENAME..MYTABLE Oracle 11g: SELECT COUNT(*) FROM MYTABLE SQL Server 2012: SELECT COUNT(*) FROM DATABASENAME.[dbo].[MYTABLE]

1
ตำแหน่งที่เหมาะสมที่สุดของไฟล์ tempdb, mdf และ ldf ใน SQL Server 2012 บน SSD หรือไม่
ฉันรู้ว่านี่อาจเป็นคำถามสิ้นสุดที่เปิดกว้างและคำตอบอาจแตกต่างกันไป แต่ตำแหน่งที่เหมาะสมที่สุดสำหรับไฟล์ tempdb, mdf และ ldf ใน SQL Server 2012 เมื่อพูดถึง SSD คืออะไร การซื้อล่วงหน้าใหม่ฉันมี SSD ที่มีอยู่ซึ่งมีไฟล์หลักของ SQL Server 2012 และ tempdb ติดตั้งอยู่และมีทั้ง mdf / ldf บน HDD 7200 รอบต่อนาที จากนั้นฉันก็ซื้อ SSD 2 ตัวโดยมีเจตนาดั้งเดิมที่จะวาง mdf ลงบนหนึ่ง ldf และใส่อีกอันหนึ่ง แต่จากการอ่านเพิ่มเติมดิสก์แยกทางกายภาพสำหรับไฟล์ mdf และ ldf ไม่ได้นำมาใช้จริง ๆ กับ SSD แก้ไข? ดังนั้นฉันคิดต่อไปนี้: SSD 1 - …

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