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

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

3
เพิ่มคอลัมน์การเปลี่ยนแปลงความเร็วในตารางขนาดใหญ่เป็น NON NULL
ฉันเพิ่งเพิ่มคอลัมน์บิตแบบ NULL ไปยังตารางที่มีเกือบ 500 ล้านแถว ไม่มีค่าเริ่มต้นในคอลัมน์อย่างไรก็ตามส่วนแทรกทั้งหมดกำลังระบุค่าเป็น 0 หรือ 1 และฉันใช้รูทีนแบบครั้งเดียวเพื่อกำหนด 0 หรือ 1 ให้กับแถวที่มีอยู่ทั้งหมด (อัปเดตแถวเป็นชุดเล็ก ๆ ) ตอนนี้ทุกแถวควรมี 0 หรือ 1 ในคอลัมน์นั้น ฉันต้องการทำให้คอลัมน์บิตเป็นโมฆะไม่ได้ แต่เมื่อฉันพยายามทำมันผ่านALTER TABLE t1 ALTER COLUMN c1 bit not nullมันเริ่มทำงานเป็นเวลา 3 นาทีและฉันหยุดมันเพราะมันบล็อกการอ่านตารางทั้งหมดและฉันสงสัยว่ามันจะใช้เวลานานกว่าจะเสร็จสมบูรณ์ . เป็นไปได้ที่จะใช้เวลาไม่นาน แต่ฉันไม่สามารถเสี่ยงกับการขาดความพร้อมมากเกินไป การย้อนกลับใช้เวลา 6 นาที คุณมีคำแนะนำใด ๆ เกี่ยวกับวิธีที่ฉันจะทำให้คอลัมน์ไม่เป็นโมฆะโดยที่ไม่ต้องใช้เวลาหลายชั่วโมงกว่าจะเสร็จ นอกจากนี้ยังมีวิธีใดที่จะประมาณว่าALTER TABLE ALTER COLUMNคำสั่งที่ฉันเริ่มและยกเลิกจะใช้เวลานานเท่าใด ฉันใช้ SQL Server …

3
การค้นหาและการอัปเดตช้ามากหลังจากดัชนีเพิ่มประสิทธิภาพ
ฐานข้อมูล SQL Server 2017 Enterprise CU16 14.0.3076.1 เราเพิ่งพยายามเปลี่ยนจากดัชนีเริ่มต้นสร้างงานบำรุงรักษาไป Ola IndexOptimizeHallengren งานสร้างดัชนีเริ่มต้นใหม่ทำงานเป็นเวลาสองสามเดือนโดยไม่มีปัญหาใด ๆ และแบบสอบถามและการปรับปรุงกำลังทำงานด้วยเวลาดำเนินการที่ยอมรับได้ หลังจากทำงานIndexOptimizeบนฐานข้อมูล: EXECUTE dbo.IndexOptimize @Databases = 'USER_DATABASES', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @FragmentationLevel2 = 30, @UpdateStatistics = 'ALL', @OnlyModifiedStatistics = 'Y' ประสิทธิภาพลดลงอย่างมาก คำสั่งการปรับปรุงที่ใช้เวลา 100 มิลลิวินาทีก่อนที่จะIndexOptimizeใช้เวลา 78.000ms หลังจากนั้น (โดยใช้แผนเหมือนกัน) และข้อความค้นหาก็มีประสิทธิภาพที่แย่กว่านั้นอีกหลายคำสั่ง เนื่องจากสิ่งนี้ยังคงเป็นฐานข้อมูลทดสอบ (เรากำลังย้ายระบบการผลิตจาก …

1
SQL Extended Events Session สำหรับการตรวจจับการชะงักงัน
มีวิธีในการเพิ่มขนาดของ<inputbuf>องค์ประกอบในการหยุดชะงัก XML ที่บันทึกโดยเซสชันเหตุการณ์ที่เพิ่มขึ้นของการหยุดชะงักหรือไม่? เราต้องการดูแบบสอบถามที่สมบูรณ์เพื่อช่วยระบุปัญหาในรหัสแอปพลิเคชัน ดูเหมือนว่าจะถูก จำกัด ที่ 1024 อักขระ +/- จะเพิ่มขึ้นได้ไหม ดูตัวอย่าง XML ด้านล่าง คุณจะเห็นว่าข้อความค้นหาใน<inputbuf>องค์ประกอบนั้นถูกตัดกลางรายการที่เลือก: <deadlock> <victim-list> <victimProcess id="processc9c0829848" /> </victim-list> <process-list> <process id="processc9c0829848" taskpriority="0" logused="0" waitresource="PAGE: 5:1:40600276 " waittime="696" ownerId="255115931225" transactionname="SELECT" lasttranstarted="2019-04-24T09:29:25.950" XDES="0xc8dfa8da40" lockMode="S" schedulerid="13" kpid="8480" status="suspended" spid="245" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-04-24T09:29:25.950" lastbatchcompleted="2019-04-24T09:29:25.950" lastattention="1900-01-01T00:00:00.950" clientapp="EntityFramework" hostname="MSR-PRD-BDB02" hostpid="43440" loginname="IUSR_BuildDB" …

1
นี่เป็นอาการของเซิร์ฟเวอร์ที่โอเวอร์โหลดหรือไม่
ฉันพยายามวินิจฉัยช้าลงในแอปพลิเคชัน สำหรับสิ่งนี้ฉันได้บันทึกกิจกรรมเพิ่มเติมของ SQL Server แล้ว สำหรับคำถามนี้ฉันกำลังดูขั้นตอนการจัดเก็บเฉพาะอย่างใดอย่างหนึ่ง แต่มีชุดหลักของขั้นตอนการจัดเก็บโหลที่เท่ากันสามารถใช้เป็นการสอบสวนแอปเปิ้ลแอปเปิ้ล และเมื่อใดก็ตามที่ฉันเรียกใช้หนึ่งในกระบวนงานที่เก็บไว้ด้วยตนเองมันจะทำงานได้อย่างรวดเร็วเสมอ และหากผู้ใช้ลองอีกครั้งมันจะทำงานเร็ว เวลาดำเนินการของโพรซีเดอร์ที่เก็บแตกต่างกันไป การประมวลผลของโพรซีเดอร์ที่เก็บไว้นี้ส่งคืนเป็นจำนวนมากใน <1s: และสำหรับถัง"เร็ว"นั้นมันน้อยกว่า 1 วินาทีมาก จริง ๆ แล้วประมาณ 90 ms: แต่มีหางยาวของผู้ใช้ที่ต้องรอ 2 วินาที, 3 วินาที, 4s วินาที บางคนต้องรอ 12 วินาที, 13 วินาที, 14 วินาที จากนั้นก็มีวิญญาณที่น่าสงสารจริงๆที่ต้องรอ 22s, 23s, 24s และหลังจาก 30s, โปรแกรมไคลเอนต์ให้ขึ้นยกเลิกแบบสอบถามและผู้ใช้ต้องรอ30 วินาที สหสัมพันธ์เพื่อค้นหาสาเหตุ ดังนั้นฉันจึงพยายามที่จะมีความสัมพันธ์: ระยะเวลาและตรรกะอ่าน ระยะเวลาเทียบกับการอ่านทางกายภาพ ระยะเวลาเทียบกับเวลา cpu และดูเหมือนจะไม่มีความสัมพันธ์ใด ๆ …

1
เหตุใดกระแสรวมนี้จึงมีความจำเป็น
ลองดูคำถามนี้ มันค่อนข้างง่าย (ดูจุดสิ้นสุดของการโพสต์สำหรับคำจำกัดความของตารางและดัชนีและสคริปต์ที่ซ้ำกัน): SELECT MAX(Revision) FROM dbo.TheOneders WHERE Id = 1 AND 1 = (SELECT 1); หมายเหตุ: "AND 1 = (SELECT 1) เพียงเพื่อป้องกันไม่ให้มีการกำหนดพารามิเตอร์อัตโนมัติซึ่งฉันรู้สึกว่าสับสนปัญหา - จริง ๆ แล้วได้รับแผนเดียวกันโดยมีหรือไม่มีประโยคนั้นแม้ว่า และนี่คือแผน ( วางลิงก์แผน) : เนื่องจากมี "อันดับ 1" อยู่ที่นั่นฉันรู้สึกประหลาดใจที่เห็นผู้ดำเนินการรวมสตรีม ไม่จำเป็นสำหรับฉันเนื่องจากมีการรับประกันว่าจะมีแถวเดียวเท่านั้น เพื่อทดสอบทฤษฎีนั้นฉันลองใช้เคียวรีที่มีเหตุผลเชิงตรรกะนี้: SELECT MAX(Revision) FROM dbo.TheOneders WHERE Id = 1 GROUP BY Id; นี่คือแผนสำหรับแผนนั้น ( …

3
เหตุใดจึงต้องใช้ master เพื่อสร้างฐานข้อมูล
ฉันมีคำถามสั้น ๆ เหตุใดฉันจึงใช้use master;เพื่อสร้างฐานข้อมูล นี่คือตัวอย่างจากเอกสารของ Microsoft USE master ; GO CREATE DATABASE Sales ON ( NAME = Sales_dat, FILENAME = 'C:\Program Files\...\saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = Sales_log, FILENAME = 'C:\Program Files\...\salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = …

3
ความท้าทายในการค้นหา: การสร้างถังขนาดใหญ่ขึ้นอยู่กับการวัดที่ไม่นับจำนวนแถว
ฉันจะอธิบายปัญหาในแง่ของการโหลดรถบรรทุกจำนวนคงที่พร้อมคำสั่งเท่าที่จะทำได้ ปัจจัยการผลิต: @TruckCount - the number of empty trucks to fill ชุด: OrderId, OrderDetailId, OrderDetailSize, TruckId (initially null) Ordersประกอบด้วยหนึ่งหรือมากกว่าOrderDetailsนั้น ความท้าทายที่นี่คือการกำหนดให้TruckIdกับแต่ละระเบียน คำสั่งเดียวไม่สามารถแยกข้ามรถบรรทุกได้ รถบรรทุกควรจะเป็นอย่างเท่าเทียมกัน * sum(OrderDetailSize)โหลดเป็นไปได้ที่วัดโดย * สม่ำเสมอ: เดลต้าที่เล็กที่สุดที่ทำได้ระหว่างรถบรรทุกที่มีน้ำหนักน้อยที่สุดและรถบรรทุกที่โหลดมากที่สุด ตามคำจำกัดความนี้ 1,2,3 จะกระจายอย่างเท่าเทียมกันมากกว่า 1,1,4 ถ้ามันช่วยคุณแกล้งทำเป็นอัลกอริทึมสถิติสร้างฮิสโตแกรมความสูงได้ ไม่มีการพิจารณาน้ำหนักบรรทุกสูงสุด เหล่านี้เป็นรถบรรทุกยืดหยุ่นวิเศษ อย่างไรก็ตามจำนวนรถบรรทุกได้รับการแก้ไขแล้ว มีวิธีแก้ปัญหาที่ชัดเจนซึ่งซ้ำแล้วซ้ำอีก - โรบินกลมจัดสรรคำสั่งซื้อ แต่มันสามารถทำได้ตามตรรกะที่ตั้งไว้? ความสนใจหลักของฉันคือ SQL Server 2014 หรือใหม่กว่า แต่การตั้งค่าโซลูชันพื้นฐานสำหรับแพลตฟอร์มอื่น ๆ ก็น่าสนใจเช่นกัน นี่ให้ความรู้สึกเหมือนดินแดน Itzik Ben-Gan …

1
จะกรองการใช้ฟังก์ชันที่ผู้ใช้กำหนดเองของ Scalar จากข้อมูลการตรวจสอบเซิร์ฟเวอร์ SQL ได้อย่างไร
เรามีฐานข้อมูล SQL Server ซึ่งมีข้อกำหนดการตรวจสอบฐานข้อมูลที่ตรวจสอบการดำเนินการทั้งหมดในฐานข้อมูล CREATE DATABASE AUDIT SPECIFICATION [dbAudit] FOR SERVER AUDIT [servAudit] ADD (EXECUTE ON DATABASE::[DatabaseName] BY [public]) เราพบว่าแบบสอบถามบางข้อจะเขียนลงในบันทึกการตรวจสอบโดยใช้ฟังก์ชั่นสเกลาร์สำหรับทุกแถวในชุดผลลัพธ์ เมื่อสิ่งนี้เกิดขึ้นบันทึกจะเต็มก่อนที่เราจะสามารถ ETL ลงในที่ซึ่งเป็นสถานที่พักผ่อนขั้นสุดท้ายและเรามีช่องว่างในการบันทึกของเรา น่าเสียดายเนื่องจากเหตุผลด้านความสอดคล้องเราไม่สามารถหยุดการตรวจสอบทุกEXECUTEคำสั่งได้ ความคิดแรกของเราสำหรับแนวทางในการแก้ไขปัญหานี้คือการใช้WHEREข้อในการตรวจสอบเซิร์ฟเวอร์เพื่อกรองกิจกรรม รหัสดูเหมือนว่านี้: WHERE [object_id] not in (Select object_id from sys.objects where type = 'FN' ) น่าเสียดายที่ SQL Server ไม่อนุญาตให้ตัวดำเนินการสัมพันธ์ (อาจเป็นเพราะมันไม่ต้องการสอบถามทุกครั้งที่มีการเขียนไปยังบันทึกการตรวจสอบ) เราต้องการหลีกเลี่ยงการเขียน proc ที่เก็บไว้ซึ่งเป็นรหัสที่ยากobject_idในWHEREข้อ แต่นั่นคือความคิดของเราในปัจจุบันเกี่ยวกับวิธีที่ดีที่สุดในการแก้ไขปัญหานี้ มีวิธีอื่นที่เราควรพิจารณาหรือไม่? เราสังเกตเห็นว่าเมื่อฟังก์ชั่นสเกลาร์ถูกใช้ใน …

3
จำลองฟังก์ชันสเกลาร์ที่ผู้ใช้กำหนดในลักษณะที่ไม่ได้ป้องกันการขนาน
ฉันพยายามดูว่ามีวิธีการหลอกลวง SQL Server ให้ใช้แผนบางอย่างสำหรับแบบสอบถามหรือไม่ 1. สภาพแวดล้อม ลองนึกภาพคุณมีข้อมูลบางอย่างที่ใช้ร่วมกันระหว่างกระบวนการที่แตกต่างกัน สมมติว่าเรามีผลการทดสอบบางอย่างซึ่งใช้พื้นที่มาก จากนั้นสำหรับแต่ละขั้นตอนเรารู้ว่าต้องการใช้ปี / เดือนใด if object_id('dbo.SharedData') is not null drop table SharedData create table dbo.SharedData ( experiment_year int, experiment_month int, rn int, calculated_number int, primary key (experiment_year, experiment_month, rn) ) go ตอนนี้สำหรับทุกกระบวนการเรามีพารามิเตอร์ที่บันทึกไว้ในตาราง if object_id('dbo.Params') is not null drop table dbo.Params create table dbo.Params …

1
เหตุใดจึงตัดทอนตาราง temp ที่ส่วนท้ายของโพรซีเดอร์ที่เก็บไว้ซึ่งสร้างพื้นที่ว่าง tempdb ให้เร็วขึ้น?
SQL Server แคชตาราง temp ที่สร้างขึ้นภายในโพรซีเดอร์ที่เก็บไว้และเปลี่ยนชื่อเพียงเมื่อโพรซีเดอร์สิ้นสุดลงและถูกเรียกใช้งานในภายหลัง คำถามของฉันเกี่ยวกับเมื่อมีการปล่อยพื้นที่ tempdb ผมเคยอ่านว่าตารางจะถูกตัดทอนในตอนท้ายของขั้นตอนที่ ฉันได้อ่านความคิดเห็นว่าสิ่งนี้ได้รับการจัดการในแต่ละช่วงและเห็นคำถามว่าจำเป็นต้องตอบคำถามเกี่ยวกับการล้างข้อมูลบน MSDNหรือไม่ แต่ถ้าหากมันไม่ถูกดำเนินการโดยเซสชั่นเดียวกันสองครั้ง? ฉันเคยได้ยินว่ามีกระบวนการเก็บรวบรวมขยะในพื้นหลังที่ทำให้มีพื้นที่ว่างเมื่อตารางไม่อยู่ในขอบเขต การตัดทอนตาราง temp ที่ส่วนท้ายของโพรซีเดอร์ที่เก็บไว้ซึ่งทำให้ดูเหมือนว่าพื้นที่ที่ตารางใช้ใน tempdb สำหรับข้อมูลที่จะเผยแพร่เร็วกว่าถ้าไม่มีการใช้คำสั่ง truncate แม้จะมีความคาดหวังที่ตรงกันข้าม ทำไม? อะไรคือความสัมพันธ์ของประสิทธิภาพในการใช้งานหรือไม่ใช้คำสั่งตัดทอน เมื่อใช้การแยก SNAPSHOT, tempdb มักจะเครียดและฉันคิดว่าการปล่อยพื้นที่ที่ใช้ใน tempdb จากตาราง tempdb ขนาดใหญ่โดยเร็วที่สุดจะช่วยป้องกันไม่ให้ tempdb เติบโตอย่างไม่จำเป็น การประหยัดพื้นที่ที่มีศักยภาพนี้จะมาพร้อมกับประสิทธิภาพหรือไม่ นี่คือรหัสบางส่วนในการทำซ้ำปัญหา (ส่วนใหญ่มาจาก @TheGameiswar โดยมีการเปลี่ยนแปลงบางอย่าง): SET NOCOUNT ON; GO ALTER PROC usp_test AS BEGIN IF object_id('tempdb..#temp') IS NOT NULL …

2
ค้นหาขนาดที่ไม่บีบอัดของตารางทั้งหมดในฐานข้อมูล
ใน Dynamics AX มีกลไกการแคชซึ่งสามารถกำหนดตารางให้โหลดลงในหน่วยความจำและแคชได้ แคชนี้ จำกัด จำนวน KB ไว้เพื่อป้องกันปัญหาหน่วยความจำ การตั้งค่าที่ฉันกำลังพูดถึงถูกเรียกentiretablecacheและโหลดทั้งตารางในหน่วยความจำทันทีที่มีการร้องขอบันทึกเดียว จนถึงเมื่อเร็ว ๆ นี้เราใช้สคริปต์บางตัวเพื่อตรวจสอบขนาดของตารางที่มีการตั้งค่านี้เพื่อดูว่าขนาดตารางเกินขีด จำกัด นี้หรือไม่ อย่างไรก็ตามตอนนี้การบีบอัดเริ่มเข้ามาเล่นและสิ่งต่าง ๆ เช่นsp_spaceusedหรือsys.allocation_unitsดูเหมือนจะรายงานพื้นที่ที่ใช้จริงโดยข้อมูลที่บีบอัด เห็นได้ชัดว่าแอ็พพลิเคชันเซิร์ฟเวอร์ทำงานกับข้อมูลที่ไม่มีการบีบอัดดังนั้นขนาดข้อมูลบนดิสก์ใน SQL Server นั้นไม่เกี่ยวข้อง ฉันต้องการขนาดจริงข้อมูลที่ไม่มีการบีบอัดจะมี ฉันรู้เกี่ยวกับsp_estimate_data_compression_savingsแต่อย่างที่ชื่อบอกนี่เป็นเพียงการประมาณ ฉันต้องการมีขนาดที่ถูกต้องที่สุด วิธีเดียวที่ฉันคิดได้ก็คือ SQL แบบไดนามิกที่ซับซ้อนที่สร้างตารางที่ไม่มีการบีบอัดด้วยโครงสร้างเดียวกับตารางที่ถูกบีบอัดแทรกข้อมูลที่บีบอัดในตารางเงานั้นแล้วตรวจสอบขนาดของตารางเงานั้น จำเป็นต้องพูดว่านี่เป็นบิตที่น่าเบื่อและใช้เวลาสักครู่ในการรันบนฐานข้อมูลหลายร้อย GB Powershell อาจเป็นตัวเลือก แต่ฉันไม่ต้องการวนซ้ำทุกตารางเพื่อดำเนินการselect *กับพวกเขาเพื่อตรวจสอบขนาดในสคริปต์เนื่องจากอาจทำให้แคชล้นและอาจใช้เวลานานเกินไป กล่าวโดยย่อฉันต้องการวิธีเพิ่มขนาดสำหรับแต่ละตารางเนื่องจากจะไม่มีการบีบอัดและมีการแตกแฟรกเมนต์ออกมาจากสมการที่นำเสนอไปยังแอปพลิเคชันหากเป็นไปได้ ฉันเปิดกว้างกับแนวทางที่แตกต่างกัน T-SQL เป็นที่ต้องการมากกว่า แต่ฉันไม่ได้ต่อต้าน Powershell หรือวิธีการสร้างสรรค์อื่น ๆ สมมติว่าบัฟเฟอร์ในแอปพลิเคชันคือขนาดของข้อมูล bigint มักมีขนาดเท่ากับ bigint เสมอและประเภทข้อมูลอักขระคือ 2 ไบต์ต่ออักขระ (unicode) …

3
บันทึก SQL Server บันทึกการดำเนินการที่ไม่ธรรมดาหรือไม่?
ฉันมักจะเห็นคำสั่งเช่นบันทึกเซิร์ฟเวอร์ sql บันทึกทุกการกระทำและการเลือกใช้ แต่ผมกำลังสับสนเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อมีการทำธุรกรรมในที่สุดก็กลิ้ง กลับ บอกว่าการทำธุรกรรมอย่างชัดเจนมี 3 งบ: statement A, statement B, และในที่สุดstatement Crollback statement D ตอนนี้พูดเมื่อการดำเนินการไม่ถึงrollback statement Dการแก้ไขจะเกิดจากการstatements A through Cบันทึกลงในบันทึกของเซิร์ฟเวอร์ sql หรือไม่ ความเข้าใจที่ 1 : งบ A ถึง D ทั้งหมดได้รับการบันทึก SQL Server บันทึกทุกอย่างไม่ว่าอะไรก็ตาม การทำความเข้าใจที่ 2 : การปรับเปลี่ยนจะถูกเก็บไว้ที่ใดที่หนึ่งในหน่วยความจำเท่านั้นและบันทึกไว้เพื่อบันทึกเมื่อ SQL Server เห็นcommitคำสั่ง ถ้าปรากฎว่าเป็นrollbackคำสั่ง SQL Server ก็เพิกเฉยต่อการแปลงข้อมูลไม่มีการเขียนเพื่อบันทึกเกิดขึ้นเพราะไม่มีวัตถุประสงค์ กล่าวอีกนัยหนึ่ง SQL Server บันทึกเมื่อมีผลลัพธ์สุทธิก่อนและหลังธุรกรรม …
12 sql-server 

3
ทำไมตัวดำเนินการแบบขนาน (Repartition Streams) จะลดการประมาณแถวเป็น 1
ฉันใช้ SQL Server 2012 Enterprise ฉันเจอแผน SQL ที่แสดงพฤติกรรมบางอย่างที่ฉันไม่พบว่าใช้งานง่าย หลังจากการดำเนินการสแกนดัชนีแบบขนานขนาดใหญ่การดำเนินการแบบขนาน (Repartition Streams) เกิดขึ้น แต่กำลังฆ่าการประมาณแถวที่ถูกส่งคืนโดยดัชนีการสแกน (Object10.Index2) ลดการประมาณการเป็น 1 ฉันได้ทำการค้นหาบางอย่างแล้ว แต่ ยังไม่เจออะไรที่อธิบายพฤติกรรมนี้ แบบสอบถามค่อนข้างง่ายแม้ว่าแต่ละตารางจะมีระเบียนเป็นล้าน ๆ นี่เป็นส่วนหนึ่งของกระบวนการโหลด DWH และชุดข้อมูลระดับกลางนี้มีการแตะสองสามครั้งตลอด แต่คำถามที่ฉันมีเกี่ยวข้องกับการประมาณแถวโดยเฉพาะ บางคนสามารถอธิบายได้หรือไม่ว่าเหตุใดการประมาณแถวที่ถูกต้องจึงไปที่ 1 ในตัวดำเนินการขนาน (Repartition Strems) นอกจากนี้ ฉันได้ส่งแผนเต็มรูปแบบเพื่อวางแผน นี่คือการดำเนินการที่เป็นปัญหา: รวมแผนผังต้นไม้ในกรณีที่เพิ่มบริบทเพิ่มเติม: ฉันสามารถใช้รูปแบบบางอย่างของรายการเชื่อมต่อที่ยื่นโดย Paul White ได้หรือไม่ (อธิบายเพิ่มเติมในเชิงลึกบนบล็อกของเขาที่นี่ ) อย่างน้อยมันก็เป็นสิ่งเดียวที่ฉันพบว่าดูเหมือนจะอยู่ใกล้กับสิ่งที่ฉันกำลังวิ่งเข้าไปในระยะไกลถึงแม้ว่าจะไม่มีโอเปอร์เรเตอร์ที่เล่น

5
การเติมข้อมูลที่หายไปตามค่าสิ้นเดือนก่อนหน้า
รับข้อมูลต่อไปนี้: create table #histories ( username varchar(10), account varchar(10), assigned date ); insert into #histories values ('PHIL','ACCOUNT1','2017-01-04'), ('PETER','ACCOUNT1','2017-01-15'), ('DAVE','ACCOUNT1','2017-03-04'), ('ANDY','ACCOUNT1','2017-05-06'), ('DAVE','ACCOUNT1','2017-05-07'), ('FRED','ACCOUNT1','2017-05-08'), ('JAMES','ACCOUNT1','2017-08-05'), ('DAVE','ACCOUNT2','2017-01-02'), ('PHIL','ACCOUNT2','2017-01-18'), ('JOSH','ACCOUNT2','2017-04-08'), ('JAMES','ACCOUNT2','2017-04-09'), ('DAVE','ACCOUNT2','2017-05-06'), ('PHIL','ACCOUNT2','2017-05-07') ; ... ซึ่งแสดงถึงเมื่อผู้ใช้ที่ได้รับมอบหมายให้กับบัญชี ฉันกำลังมองหาผู้ที่เป็นเจ้าของบัญชีที่กำหนดในวันสุดท้ายของแต่ละเดือน (วันที่ได้รับมอบหมายคือวันที่บัญชีโอนการเป็นเจ้าของ) โดยมีการสิ้นเดือนที่ขาดหายไป (อาจสร้างจากdatesตารางที่มีประโยชน์ที่ฉันมีอยู่) มีคอลัมน์ที่มีประโยชน์DateKey, DateและLastDayOfMonth[มารยาทของ @AaronBertrand]) 1 ผลลัพธ์ที่ต้องการคือ: PETER, ACCOUNT1, 2017-01-31 PETER, ACCOUNT1, 2017-02-28 DAVE, ACCOUNT1, 2017-03-31 …

2
ไม่มีแผนการดำเนินการสำหรับกระบวนงานที่เก็บไว้
อะไรคือสาเหตุของแผนที่จะหายไปจากแคชสำหรับขั้นตอนการจัดเก็บ? WITH RECOMPILE SQL แบบไดนามิก รหัสที่เข้ารหัส การเปลี่ยนแปลงข้อมูลที่สำคัญ อัปเดตสถิติ มีอะไรอีกบ้าง? ฉันทำงานกับเซิร์ฟเวอร์ 2 เครื่อง (SQL Server 2008 R2 และ SQL Server 2012) เมื่อเร็ว ๆ นี้ที่ไม่มีแผนในแคชสำหรับขั้นตอนการจัดเก็บที่ใช้ทรัพยากรมาก คำสั่งจำนวนมากอาจทั้งหมดในกระบวนการที่เก็บไว้ยังไม่มีแผนในแคช โพรซีเดอร์ที่เก็บไว้บางตัวรันค่อนข้างบ่อยเหมือนสองสามครั้งต่อวินาที ไม่มีแรงกดดันด้านความจำ แต่อย่างใด เซิร์ฟเวอร์ตัวใดตัวหนึ่งมีฮาร์ดแวร์มากกว่าที่ต้องการ ฉันคิดว่าแผนที่ขาดหายไปเกิดจากการสร้างตารางชั่วคราวในระหว่างขั้นตอนการจัดเก็บ แต่ดูเหมือนจะเป็นข้อมูลเก่าจาก SQL Server 2000 หรือเก่ากว่า เริ่มต้นด้วย SQL Server 2005 การคอมไพล์ใหม่เกิดขึ้นที่ระดับคำสั่งสำหรับคำสั่งหลังจาก DDL เป็นจริงในทุกกรณีหรือยังสามารถเกิดขึ้นกับรุ่นที่ใหม่กว่าได้หรือไม่ มีอะไรอีกที่เป็นตัวการสำคัญสำหรับแผนการที่หายไป? ฉันได้อ่านบทความบางส่วนในหัวข้อนี้ แต่ดูเหมือนว่าไม่มีอะไรเหมาะสม ปรับให้เหมาะสมสำหรับเวิร์กโหลด adhocเปิดใช้งานบนเซิร์ฟเวอร์ที่ฉันกำลังดูในสัปดาห์นี้ หนึ่งในกระบวนงานที่เก็บไว้จะดำเนินการวันละครั้งเท่านั้น ฉันมีรหัสสำหรับอันนั้น ฉันไม่มีรหัสสำหรับรหัสที่ทำงานมากกว่า 100 …

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