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

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

2
วิธีที่ดีที่สุดในการแทรกข้อมูลประจำตัวสุดท้ายในตาราง
ตัวเลือกใดเป็นตัวเลือกที่ดีที่สุดในการรับค่าตัวตนที่ฉันเพิ่งสร้างผ่านการแทรก อะไรคือผลกระทบของแถลงการณ์เหล่านี้ในแง่ของประสิทธิภาพ? SCOPE_IDENTITY() ฟังก์ชันการรวม MAX() SELECT TOP 1IdentityColumn จาก TableNameORDER BY IdentityColumn DESC

1
SLEEP_TASK Wait Type ใน SQL Server - มันระบุอะไร?
ฉันไม่เคยเห็นSLEEP_TASKประเภทรอมาก่อนและวันนี้ฉันดูเหมือนจะได้รับพวกเขามากมาย ฉันไม่ใช่ DBA ที่เป็นทางการเพียงแค่นักพัฒนา SQL Server ที่รู้เรื่อง DBA เราอัปเกรดเซิร์ฟเวอร์ของเราเมื่อสัปดาห์ที่แล้วเป็น10.52.2500.0- R2SP1 ฉันคิดว่า ข้อมูลทั้งหมดที่ฉันสามารถค้นหาออนไลน์ระบุว่าSLEEP_TASKเซิร์ฟเวอร์กำลังรอกระบวนการภายในบางประเภทให้เสร็จสมบูรณ์ ฉันไม่มีการบล็อกหรือกระบวนการพื้นหลังใด ๆ เช่นจุดตรวจหรือการล้างข้อมูลผีทำงานดังนั้นฉันจึงนิ่งงันเล็กน้อย มีใครเคยเห็นรูปแบบการรอนี้มาก่อนและถ้าเป็นเช่นนั้นคุณสามารถบอกฉันได้ว่าอะไรเป็นสาเหตุ

4
ประสิทธิภาพของเซิร์ฟเวอร์ SQL ช้าลงหลังจากจัดสรร CPU และ RAM เพิ่มเติม
เรามี SQL Server 2008 R2 (10.50.1600) ที่ทำงานบนเซิร์ฟเวอร์ Windows 2008 R2 เสมือน หลังจากอัปเกรด CPU จาก 1 คอร์เป็น 4 และแรมจาก 4 gb เป็น 10 gb เราได้สังเกตเห็นว่าประสิทธิภาพแย่ลง ข้อสังเกตบางอย่างที่ฉันเห็น: ข้อความค้นหาที่ใช้เวลา <5 วินาทีในการทำงาน> 200 วินาที ซีพียูถูกตรึงที่ 100 กับ sqlservr.exe เป็นผู้ร้าย จำนวนที่เลือก (*) บนตารางที่มี 4.6 ล้านแถวใช้เวลามากกว่า 90 วินาที กระบวนการที่ทำงานบนเซิร์ฟเวอร์ไม่ได้เปลี่ยนแปลง การเปลี่ยนแปลงเพียงอย่างเดียวคือการเพิ่มซีพียูและแรม เซิร์ฟเวอร์ sql อื่นมีไฟล์เก็บเพจแบบสแตติกซึ่งเซิร์ฟเวอร์นี้ถูกตั้งค่าให้จัดการด้วยตนเอง มีใครประสบปัญหานี้มาก่อนหรือไม่ ต่อ sp_Blitz …

4
ยังผิดไหมที่จะเริ่มต้นชื่อผู้ใช้ที่จัดเก็บโพรซีเดอร์ด้วย sp_?
หนึ่งในเพื่อนร่วมงานของฉันตั้งชื่อกระบวนงานที่เก็บไว้ในฐานข้อมูล SQL Server 2008 R2 ของsp_somethingเรา เมื่อฉันเห็นสิ่งนี้ฉันก็คิดทันที: "นั่นมันผิด!" และเริ่มค้นหาบุ๊กมาร์กของฉันสำหรับบทความออนไลน์นี้ซึ่งอธิบายว่าทำไมมันผิดดังนั้นฉันจึงสามารถให้คำอธิบายแก่เพื่อนร่วมงานของฉันได้ ในบทความ (โดยBrian Moran ) มีการอธิบายว่าการให้ขั้นตอนการจัดเก็บคำนำหน้าsp_ทำให้ SQL Server ดูที่ฐานข้อมูลหลักสำหรับแผนรวบรวม เนื่องจากsp_sprocไม่ได้อยู่ที่นั่น SQL Server จะคอมไพล์โพรเซสอีกครั้ง ตัวอย่างต่อไปนี้ให้ไว้ในบทความเพื่อแสดงความแตกต่างระหว่างสองขั้นตอน: USE tempdb; GO CREATE PROCEDURE dbo.Select1 AS SELECT 1; GO CREATE PROCEDURE dbo.sp_Select1 AS SELECT 1; GO EXEC dbo.sp_Select1; GO EXEC dbo.Select1; GO คุณรันสิ่งนี้จากนั้นเปิด Profiler (เพิ่มกระบวนงานที่เก็บไว้ -> SP:CacheMissเหตุการณ์) …

2
ลำดับของคอลัมน์ในดัชนี PK มีความสำคัญหรือไม่?
ฉันมีตารางที่มีขนาดใหญ่มากไม่กี่แห่งที่มีโครงสร้างพื้นฐานแบบเดียวกัน แต่ละคนมีRowNumber (bigint)และDataDate (date)คอลัมน์ ข้อมูลถูกโหลดโดยใช้ SQLBulkImport ทุกคืนและไม่มีการโหลดข้อมูล "ใหม่" - บันทึกประวัติ (SQL Standard ไม่ใช่ Enterprise ดังนั้นจึงไม่มีการแบ่งพาร์ติชัน) เนื่องจากข้อมูลแต่ละบิตจำเป็นต้องเชื่อมโยงกลับไปที่ระบบอื่น ๆ และการRowNumber/DataDateรวมกันแต่ละครั้งไม่ซ้ำกันนั่นคือคีย์หลักของฉัน ฉันสังเกตเห็นว่าเนื่องจากวิธีที่ฉันกำหนด PK ใน SSMS Table Designer RowNumberแสดงรายการที่หนึ่งและDataDateสอง ฉันยังสังเกตเห็นว่าการกระจายตัวของฉันมักจะสูงมาก ~ 99% ตอนนี้เพราะแต่ละรายการDataDateปรากฏเพียงครั้งเดียวฉันคาดว่าเครื่องมือสร้างดัชนีจะเพิ่มไปยังหน้าเว็บในแต่ละวัน แต่ฉันสงสัยว่าจริง ๆ แล้วการจัดทำดัชนีอิงตามลำดับRowNumberแรกหรือไม่และต้องเปลี่ยนทุกอย่างอื่นหรือไม่ Rownumberไม่ใช่คอลัมน์ข้อมูลประจำตัว แต่เป็น int ที่สร้างขึ้นโดยระบบภายนอก (น่าเศร้า) DataDateมันรีเซ็ตในช่วงเริ่มต้นของแต่ละคน ตัวอย่างข้อมูล RowNumber | DataDate | a | b | c..... 1 |2013-08-01| …

2
คำขอ I / O ใช้เวลานานกว่า 15 วินาที
โดยทั่วไปแล้วการสำรองข้อมูลเต็มรูปแบบรายสัปดาห์ของเราจะเสร็จสิ้นในเวลาประมาณ 35 นาทีโดยมีการสำรองข้อมูลต่าง ๆ รายวันเสร็จใน ~ 5 นาที ตั้งแต่วันอังคารหนังสือพิมพ์รายวันใช้เวลาเกือบ 4 ชั่วโมงจึงจะเสร็จสมบูรณ์ บังเอิญสิ่งนี้เริ่มเกิดขึ้นทันทีหลังจากที่เราได้ SAN / disk config ใหม่ โปรดทราบว่าเซิร์ฟเวอร์กำลังทำงานในการผลิตและเราไม่มีปัญหาโดยรวมก็ทำงานได้อย่างราบรื่น - ยกเว้นปัญหา IO ที่ปรากฏตัวเป็นหลักในการสำรองข้อมูล ดูที่ dm_exec_requests ระหว่างการสำรองข้อมูลการสำรองข้อมูลกำลังรอ ASYNC_IO_COMPLETION อยู่ตลอดเวลา อ๊ะเรามีข้อขัดแย้งของดิสก์! อย่างไรก็ตามทั้ง MDF (บันทึกจะถูกเก็บไว้ในโลคัลดิสก์) หรือไดรฟ์สำรองไม่มีกิจกรรมใด ๆ (IOPS ~ = 0 - เรามีหน่วยความจำมากมาย) ความยาวคิวของดิสก์ ~ = 0 เช่นกัน CPU วนเวียนอยู่ประมาณ 2-3% ไม่มีปัญหาเช่นกัน SAN เป็น …

2
มีประโยชน์หรือไม่หากมีไดเรกทอรีรูตอินสแตนซ์ของ SQL Server บนไดรฟ์แยกต่างหาก
ฉันรู้ว่าเป็นไปได้ที่จะเปลี่ยนเส้นทางเริ่มต้นจำนวนมากเมื่อติดตั้ง SQL Server และโดยทั่วไปเมื่อฉันติดตั้งฉันเปลี่ยนข้อมูลและโฟลเดอร์บันทึกเป็นไดรฟ์แยกต่างหาก (โดยทั่วไปคือ D และ E) แต่ฉันเพิ่งได้รับ เครื่องที่ติดตั้งล่วงหน้าซึ่งใช้ชื่ออินสแตนซ์นอกเหนือจากค่าเริ่มต้นและพวกเขาได้กำหนดค่าไดเรกทอรีรากของอินสแตนซ์ให้อยู่ในไดรฟ์ D พร้อมกับไฟล์ mdf ซึ่งหมายความว่าสิ่งที่ตามปกติจะเป็นไดรฟ์ที่ค่อนข้างสะอาดโดยมีเพียงโฟลเดอร์และไฟล์ฐานข้อมูลในตอนนี้ฉันมีการติดตั้งไบนารีของ SQL Server แบบเต็มเช่นกัน คือตอนนี้ฉันมีดังต่อไปนี้: C:\Program Files\Microsoft SQL Server\ --Base Install D:\Microsoft SQL Server\MSSQL10_50.MyInstance --Instance Binaries D:\Microsoft SQL Server\MSSQL10_50.MyInstance\MSSQL\DATA --Data Files E:\Microsoft SQL Server\MSSQL10_50.MyInstance\MSSQL\LOGS --Log Files โดยปกติแล้วฉันจะวิ่งด้วยบางสิ่งเช่น: C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\ --Base Install & Default Instance Binaries …

4
EF Code First ใช้ nvarchar (สูงสุด) สำหรับสตริงทั้งหมด สิ่งนี้จะทำให้ประสิทธิภาพการค้นหาเสียหายหรือไม่
ฉันมีฐานข้อมูลบางส่วนที่สร้างขึ้นโดยใช้รหัสเอนทิตีกรอบแรก; แอพใช้งานได้และโดยทั่วไปฉันมีความสุขมากกับสิ่งที่ Code First ให้ฉันทำ ฉันเป็นโปรแกรมเมอร์คนแรกและ DBA ที่สองตามความจำเป็น ฉันกำลังอ่านเกี่ยวกับ DataAttributes เพื่ออธิบายเพิ่มเติมใน C # สิ่งที่ฉันต้องการให้ฐานข้อมูลทำ และคำถามของฉันคือฉันจะได้รับโทษอะไรจากการมีnvarchar(max)เงื่อนไขเหล่านี้ในตารางของฉัน (ดูตัวอย่างด้านล่าง) มีหลายคอลัมน์ในตารางนี้ ใน C # พวกเขาถูกกำหนดเช่น: [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } public string Name { get; set; } public string Message { get; set; } public string Source { get; set; …

3
วิธีการกำหนดค่าสำหรับการประเมินขนาดบัฟเฟอร์พูลที่เหมาะสมคืออะไร?
ฉันกำลังพยายามหาวิธีที่ชาญฉลาดเพื่อทำความเข้าใจว่าการmax server memory (mb)ตั้งค่านั้นเหมาะสมหรือไม่ (ควรจะต่ำกว่าหรือสูงกว่าหรืออยู่ในแนวทางที่เหมาะสม) ฉันรู้ว่าmax server memory (mb)ควรจะต่ำพอที่จะออกจากห้องสำหรับระบบปฏิบัติการตัวเอง ฯลฯ สภาพแวดล้อมที่ฉันกำลังมองหามีเซิร์ฟเวอร์หลายร้อยเครื่อง ฉันต้องการสูตรที่เชื่อถือได้ฉันสามารถใช้เพื่อตรวจสอบว่าขนาดปัจจุบันของบัฟเฟอร์พูลนั้นเหมาะสมหรือไม่เนื่องจาก RAM คิดต้นทุนต่อ GB ที่จัดสรรให้กับเซิร์ฟเวอร์แต่ละเครื่อง สภาพแวดล้อมทั้งหมดถูกจำลองเสมือนและ RAM "ทางกายภาพ" ที่จัดสรรให้กับ VM สามารถเปลี่ยนแปลงได้ง่ายขึ้นหรือลง ฉันมีอินสแตนซ์ของเซิร์ฟเวอร์ SQL ที่เฉพาะเจาะจงฉันกำลังดูด้วย PLE ที่ 1,100,052 วินาทีซึ่งเท่ากับ 12.7 วัน (ระยะเวลาที่เซิร์ฟเวอร์ใช้งาน) เซิร์ฟเวอร์มีการตั้งค่าหน่วยความจำสูงสุดของเซิร์ฟเวอร์ที่ 2560MB (2.5GB) ซึ่งมีการกำหนดเพียง 1380MB (1.3GB) เท่านั้น ฉันได้อ่านหลายรายการรวมถึงหนึ่งโดย Jonathan Keheyias ( โพสต์ ) และอีกรายการโดย Paul Randal ( โพสต์ …

3
การเพิ่มคอลัมน์ในตารางการผลิต
วิธีที่ดีที่สุดในการเพิ่มคอลัมน์ในตารางการผลิตขนาดใหญ่บน SQL Server 2008 R2 คืออะไร ตามหนังสือของ Microsoft ทางออนไลน์: การเปลี่ยนแปลงที่ระบุใน ALTER TABLE จะถูกนำไปใช้งานทันที หากการเปลี่ยนแปลงนั้นต้องการการแก้ไขแถวในตาราง ALTER TABLE จะอัพเดตแถว ALTER TABLE ได้รับ schema แก้ไขการล็อกบนตารางเพื่อให้แน่ใจว่าไม่มีการอ้างอิงการเชื่อมต่ออื่น ๆ แม้แต่ข้อมูลเมตาสำหรับตารางในระหว่างการเปลี่ยนแปลงยกเว้นการดำเนินการดัชนีออนไลน์ที่ต้องใช้การล็อค SCH-M ที่สั้นมากในตอนท้าย (http://msdn.microsoft.com/en-us/library/ms190273.aspx) บนโต๊ะขนาดใหญ่ที่มีแถวนับล้านแถวอาจใช้เวลาสักครู่ การดับเป็นตัวเลือกเดียวหรือไม่ วิธีที่ดีที่สุดในการจัดการกับสถานการณ์เช่นนี้คืออะไร?

2
ปัญหาอะไรที่บ่งบอกถึงความกระตือรือร้น
กำลังทำงานบน SQL Server 2008 R2 ฉันกำลังพยายามเพิ่มประสิทธิภาพของคำสั่ง UPDATE ฉันสังเกตเห็นการทำงานของ Eager Spool ใน showplan โผล่ขึ้นมา ความเข้าใจของฉันเกี่ยวกับการทำสปูลนั้นค่อนข้างธรรมดา - พวกมันสร้างที่เก็บข้อมูลชั่วคราวสำหรับตารางในระหว่างการอัพเดท ฉันยังรู้ว่าในขณะที่พวกเขากำลังป้องกันเวลาการดำเนินการที่เลวร้ายกว่ามาก, spools ความกระตือรือร้นมักจะบ่งบอกถึงปัญหาพื้นฐานของโครงสร้างตารางและ / หรือคำสั่งแบบสอบถาม คำถามของฉันค่อนข้างง่าย: เมื่อคุณเห็น Eager Spool ในแผนคิวรีของคุณคุณพบปัญหาอะไรก่อน ฉันจะวิเคราะห์ทุกส่วนของระบบของเราเพื่อเพิ่มประสิทธิภาพ - ฉันแค่มองหาคำแนะนำว่าควรเริ่มจากตรงไหน

2
วิธีการเขียนแบบสอบถามที่ค้นหาการอ้างอิงแบบวงกลมทั้งหมดเมื่อตารางอ้างอิงตัวเอง?
ฉันมีสคีมาต่อไปนี้ (เปลี่ยนชื่อ) ซึ่งฉันไม่สามารถเปลี่ยนแปลงได้: CREATE TABLE MyTable ( Id INT NOT NULL PRIMARY KEY, ParentId INT NOT NULL ); ALTER TABLE MyTable ADD FOREIGN KEY (ParentId) REFERENCES MyTable(Id); นั่นคือแต่ละระเบียนเป็นลูกของบันทึกอื่น หากเร็กคอร์ดของParentIdเท่ากับIdเร็กคอร์ดนั้นจะถือว่าเป็นโหนดรูท ฉันต้องการเรียกใช้แบบสอบถามซึ่งจะค้นหาการอ้างอิงแบบวงกลมทั้งหมด ตัวอย่างเช่นกับข้อมูล INSERT INTO MyTable (Id, ParentId) VALUES (0, 0), (1, 0), (2, 4), (3, 2), (4, 3); แบบสอบถามควรกลับมา Id | …

7
พยายามค้นหาครั้งล่าสุดที่มีการเปลี่ยนแปลงค่า
ฉันมีตารางที่มี ID ค่าและวันที่ มี ID, ค่าและวันที่จำนวนมากในตารางนี้ บันทึกจะถูกแทรกลงในตารางนี้เป็นระยะ ID จะยังคงเหมือนเดิม แต่บางครั้งค่าจะเปลี่ยน ฉันจะเขียนคิวรีที่จะให้ ID พร้อมกับเวลาที่มีการเปลี่ยนแปลงค่าล่าสุดได้อย่างไร หมายเหตุ: ค่าจะเพิ่มขึ้นเสมอ จากข้อมูลตัวอย่างนี้: Create Table Taco ( Taco_ID int, Taco_value int, Taco_date datetime) Insert INTO Taco Values (1, 1, '2012-07-01 00:00:01'), (1, 1, '2012-07-01 00:00:02'), (1, 1, '2012-07-01 00:00:03'), (1, 1, '2012-07-01 00:00:04'), (1, 2, '2012-07-01 00:00:05'), …

2
เปลี่ยนคอลัมน์จาก NOT NULL เป็น NULL - เกิดอะไรขึ้นภายใต้ประทุน?
เรามีตารางที่มีแถว 2.3B อยู่ เราต้องการเปลี่ยนคอลัมน์จาก NOT NULL เป็น NULL คอลัมน์มีอยู่ในหนึ่งดัชนี (ไม่ใช่ดัชนีแบบคลัสเตอร์หรือ PK) ชนิดข้อมูลไม่เปลี่ยนแปลง (เป็น INT) เพียงความไร้ค่า คำสั่งดังต่อไปนี้: Alter Table dbo.Workflow Alter Column LineId Int NULL การดำเนินการใช้เวลาเกินกว่า 10 ก่อนที่เราจะหยุดมัน (เรายังไม่ปล่อยให้มันทำงานจนเสร็จเพราะมันเป็นการปิดกั้นและใช้เวลานานเกินไป) เราอาจคัดลอกตารางไปยังเซิร์ฟเวอร์ dev เพื่อทดสอบว่าใช้เวลานานเท่าใด แต่ฉันอยากรู้ถ้าใครรู้ว่าสิ่งที่ SQL Server ทำภายใต้ประทุนเมื่อแปลงจาก NOT NULL เป็น NULL นอกจากนี้ดัชนีที่ได้รับผลกระทบจะต้องได้รับการสร้างใหม่หรือไม่ แผนแบบสอบถามที่สร้างขึ้นไม่ได้ระบุว่าเกิดอะไรขึ้น ตารางในคำถามถูกทำคลัสเตอร์ (ไม่ใช่ฮีป)

2
คุณสามารถใช้ COUNT DISTINCT กับ OVER clause ได้หรือไม่?
ฉันพยายามปรับปรุงประสิทธิภาพของข้อความค้นหาต่อไปนี้: UPDATE [#TempTable] SET Received = r.Number FROM [#TempTable] INNER JOIN (SELECT AgentID, RuleID, COUNT(DISTINCT (GroupId)) Number FROM [#TempTable] WHERE Passed = 1 GROUP BY AgentID, RuleID ) r ON r.RuleID = [#TempTable].RuleID AND r.AgentID = [#TempTable].AgentID ขณะนี้ข้อมูลการทดสอบของฉันใช้เวลาประมาณหนึ่งนาที ฉันมีอินพุตจำนวน จำกัด ในการเปลี่ยนแปลงในโพรซีเดอร์ที่เก็บไว้ทั้งหมดที่มีการค้นหานี้ แต่ฉันสามารถให้พวกเขาแก้ไขเคียวรีนี้ได้ หรือเพิ่มดัชนี ฉันพยายามเพิ่มดัชนีต่อไปนี้: CREATE CLUSTERED INDEX ix_test ON #TempTable(AgentID, …

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