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

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

1
วิธีรีเซ็ตสถิติหลังจากอัพเดตสถิติ ... ด้วย ROWCOUNT
สำหรับการปรับแต่งและวัตถุประสงค์ในการทดสอบแบบสอบถามคุณสามารถกำหนด rowcount และ PAGECOUNT UPDATE STATISTICSสถิติดัชนีของตารางโดยการเรียกใช้ แต่คุณจะคำนวณ / รีเซ็ตสถิติเป็นเนื้อหาจริงของตารางได้อย่างไร --- Create a table.. CREATE TABLE dbo.StatTest ( i int NOT NULL, CONSTRAINT PK_StatTest PRIMARY KEY CLUSTERED (i) ); GO --- .. and give it a thousand-or-so rows: DECLARE @i int=1; INSERT INTO dbo.StatTest (i) VALUES (@i); WHILE (@i<1000) BEGIN; INSERT …

3
การประเมินความผิดปกติที่ไม่ดีทำให้ขาดคุณสมบัติ INSERT จากการบันทึกที่น้อยที่สุด?
ทำไมข้อความที่สองINSERT~ 5x ช้ากว่าประโยคแรก จากจำนวนข้อมูลบันทึกที่สร้างขึ้นฉันคิดว่าข้อมูลที่สองไม่ผ่านการรับรองสำหรับการบันทึกขั้นต่ำ อย่างไรก็ตามเอกสารประกอบในคู่มือประสิทธิภาพการโหลดข้อมูลระบุว่าส่วนแทรกทั้งสองควรสามารถบันทึกได้น้อยที่สุด ดังนั้นหากการบันทึกขั้นต่ำเป็นความแตกต่างของประสิทธิภาพที่สำคัญทำไมจึงเป็นไปได้ว่าการสืบค้นครั้งที่สองไม่มีคุณสมบัติสำหรับการบันทึกขั้นต่ำ สิ่งที่สามารถทำได้เพื่อปรับปรุงสถานการณ์? Query # 1: การแทรกแถว 5 มม. โดยใช้ INSERT ... with (TABLOCK) พิจารณาแบบสอบถามต่อไปนี้ซึ่งแทรกแถว 5MM ลงในกอง แบบสอบถามนี้ดำเนินการใน1 secondและสร้างข้อมูลล็อกธุรกรรมตามการรายงานของ64MBsys.dm_tran_database_transactions CREATE TABLE dbo.minimalLoggingTest (n INT NOT NULL) GO INSERT INTO dbo.minimalLoggingTest WITH (TABLOCK) (n) SELECT n -- Any table/view/sub-query that correctly estimates that it will generate 5MM …

3
ข้อแตกต่างระหว่าง WITH CTE และ WITH CTE (<column_name>) คืออะไร
ดังที่แสดงในการใช้ Common Table Expressionsบน MSDN คุณสามารถกำหนด CTE เป็น: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) และใช้มันเช่น: SELECT &lt;column_list&gt; FROM expression_name; สมมติว่าฉันมี 2 CTE ต่อไปนี้ with cte1 as( select name from Table1 ) with cte2(name) as( select name from Table1 ) แบบสอบถามส่งผลลัพธ์เดียวกันสำหรับ CTE ทั้งสองเนื่องจากแบบสอบถามภายในเหมือนกัน ข้อแตกต่างระหว่างสองสิ่งนี้คือcte2มีชื่อคอลัมน์ ( …

1
การใช้กระบวนการไม่ถูกต้องจากเหตุการณ์ที่เพิ่มความสมบูรณ์ของระบบหรือไม่
ฉันเพิ่งทำงานเกี่ยวกับการทำความเข้าใจข้อมูลหรือตัวชี้วัดที่ถูกเก็บไว้ในไฟล์เหตุการณ์ขยายระบบสุขภาพ เรากำลังพยายามใช้การรวบรวมข้อมูลของตัวชี้วัดประสิทธิภาพโดยใช้ความสมบูรณ์ของระบบตามที่ระบุไว้ที่นี่ มีรายงานที่ให้ตัวชี้วัดเช่นการใช้ CPU, การใช้งานกระบวนการอื่น ๆ ที่รวบรวมจากเหตุการณ์สถานะระบบ scheduler_monitor_system_health_ring_buffer_recorded ฉันไม่สามารถเข้าใจเซิร์ฟเวอร์ไม่กี่แห่งของฉันได้เพราะเหตุใดฟิลด์ "process_utilization" ซึ่งแสดงอยู่ในรายงานเนื่องจากการใช้งาน CPU CPU นั้นใช้เวลาส่วนใหญ่มากกว่า 100 เวลาสูงสุดในช่วงเวลาสูงสุดจะแตกต่างกันระหว่าง 120-160 และเพราะรายงานนั้น แสดง CPU ที่สูงกว่า 100 เสมอแม้ว่าฉันจะตรวจสอบจากเซิร์ฟเวอร์กิจกรรมการตรวจสอบที่ไม่เคยกรณี ฉันได้หยิบยกปัญหานี้ขึ้นใน Github แต่ดูเหมือนไม่มีการแก้ไขหรือตอบสนอง ดังนั้นคำถามของฉันจะเป็น ฉันจะได้รับหมายเลขที่ถูกต้องสำหรับการใช้งาน CPU CPU สำหรับเซิร์ฟเวอร์ของฉันโดยใช้บัฟเฟอร์เสียงเรียกทำงานระบบได้อย่างไร? รายงานยังแสดงตัวนับสำหรับเขตข้อมูลด้านล่าง 2 คำนวณจากรายงานของพวกเขา 100-System_idle-process_utilization เป็น OtherProcessUtil 100-system_idle เป็น SystemUtil OtherProcessUtilและSystemUtilเหล่านี้มีความจำเป็น / มีประโยชน์สำหรับอะไร? ฉันยังเห็นการใช้หน่วยความจำทุกครั้งที่แสดงเป็น 100 ซึ่งดูไม่ถูกต้องเช่นกัน มีใครสังเกตเห็นไหม เครื่องมืออื่น ๆ เช่น …

2
การคำนวณปริมาณสต็อคตามบันทึกการเปลี่ยนแปลง
ลองนึกภาพว่าคุณมีโครงสร้างตารางต่อไปนี้: LogId | ProductId | FromPositionId | ToPositionId | Date | Quantity ----------------------------------------------------------------------------------- 1 | 123 | 0 | 10002 | 2018-01-01 08:10:22 | 5 2 | 123 | 0 | 10003 | 2018-01-03 15:15:10 | 9 3 | 123 | 10002 | 10004 | 2018-01-07 21:08:56 | 3 4 …

1
จะคูณแถวสำหรับคอลัมน์ที่มีค่าลบและศูนย์ได้อย่างไร
ฉันกำลังพยายามรับผลิตภัณฑ์ของทุกแถวสำหรับคอลัมน์ที่ระบุในการจัดกลุ่มตามแบบสอบถาม ตัวอย่างส่วนใหญ่ที่ฉันได้พบจุดที่ฉันมีต่อการรวมexp, sumและlog exp(sum(log([Column A]))) ปัญหาที่ฉันมีอยู่คือคอลัมน์มีค่าศูนย์บางค่าและทำให้ฉันได้รับข้อผิดพลาดนี้เมื่อค่าศูนย์ส่งผ่านไปยังlogฟังก์ชัน: การดำเนินการจุดลอยตัวไม่ถูกต้องเกิดขึ้น ฉันคิดว่าฉันสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยการใช้caseนิพจน์ แต่นั่นก็ไม่เป็นไปตามที่ฉันคิดว่ามันควรจะเป็นเพราะดูเหมือนว่าจะประเมินทุกกรณี select Name, Product = case when min([Value]) = 0 then 0 when min([Value]) &lt;&gt; 0 then exp(sum(log(I))) -- trying to get the product of all rows in this column end from ids group by Name SqlFiddle รับชุดผลลัพธ์ต่อไปนี้: Id Name Value _________________________________ …

1
ใครใช้เธรดคนงานของฉัน SQL Server 2014 - HADR
เมื่อเร็ว ๆ นี้เรามีปัญหาเกี่ยวกับสภาพแวดล้อม HADR ของ SQL Server 2014 ซึ่งเซิร์ฟเวอร์ตัวใดตัวหนึ่งขาดเธรดของผู้ปฏิบัติงาน เราได้รับข้อความ: กลุ่มเธรดสำหรับกลุ่มความพร้อมใช้งาน AlwaysOn ไม่สามารถเริ่มเธรดผู้ปฏิบัติงานใหม่ได้เนื่องจากมีเธรดผู้ปฏิบัติงานที่พร้อมใช้งานไม่เพียงพอ ฉันแล้วเปิดคำถามอื่นเพื่อให้ได้คำสั่งที่ (ผมคิดว่า) จะช่วยให้ผมวิเคราะห์ปัญหา ( มันเป็นไปได้ที่จะเห็นการใช้งานซึ่ง SPID ซึ่งจัดตารางเวลา (ด้ายคน)? ) แม้ว่าตอนนี้ฉันจะมีแบบสอบถามเพื่อค้นหาเธรดที่ใช้ระบบนี้ แต่ฉันไม่เข้าใจว่าทำไมเซิร์ฟเวอร์นั้นถึงไม่มีเธรดของผู้ปฏิบัติงาน สภาพแวดล้อมของเรามีดังนี้: 4 Windows Server 2012 R2 SQL Server 2014 Enterprise 24 ตัวประมวลผล -&gt; 832 เธรดผู้ทำงาน 256 GB ราม 12 กลุ่มความพร้อมใช้งาน (โดยรวม) 642 ฐานข้อมูล (โดยรวม) ดังนั้นเซิร์ฟเวอร์ที่มีปัญหามีการกำหนดค่าต่อไปนี้: 5 …


2
อัปเดตสถิติที่มีการสแกนเต็มรูปแบบใน SQL Server 2014 ใช้ 100% cpu บน 2008 R2, 15%
เหตุใดสถิติการปรับปรุงการสแกนแบบสมบูรณ์จึงใช้ 100% ของ CPU ใน SQL Server 2014 เมื่อใช้ CPU 20% ของ SQL Server 2008 R2 สำหรับตารางเดียวกันโดยมีความสามารถด้านฮาร์ดแวร์ที่คล้ายกัน ฉันได้ดูMAXDOPทางเลือกอื่น ๆ และไม่เห็นอะไรที่ชัดเจน ฉันรู้ว่าอาจมีการตั้งค่าที่อาจทำให้เกิดปัญหานี้ แต่การตั้งค่าคล้ายกันมากสำหรับฐานข้อมูลทั้งสอง (ตัวอย่างเช่นMAXDOPคือ 4 สำหรับทั้งคู่โดยที่ทั้งคู่มีหลายคอร์) ทั้งสองเป็น Enterprise Edition มีบางสิ่งที่ "แตกต่าง" ใน SQL Server 2014 เทียบกับ SQL Server 2008 R2 ที่สามารถอธิบายสิ่งนี้ได้หรือไม่ ฉันมีตัวเลือกหน่วยความจำที่ 90% สำหรับเซิร์ฟเวอร์ทั้งสอง มีความคิดเกี่ยวกับสิ่งที่จะมองหา? ฉันรันสถิติการอัพเดทด้วยการสแกนเต็มรูปแบบ (100%) สัปดาห์ละครั้งบนเซิร์ฟเวอร์สองเครื่องโดยใช้ SQL Server 2008 …

1
เลือก Supersets เท่านั้น
ฉันมีสองตาราง (พร้อมกับดัชนี nonclustered) ที่สามารถสร้างด้วยคำสั่งด้านล่าง: CREATE TABLE GroupTable ( GroupKey int NOT NULL PRIMARY KEY, RecordCount int NOT NULL, GroupScore float NOT NULL ); CREATE TABLE RecordTable ( RecordKey varchar(10) NOT NULL, GroupKey int NOT NULL, PRIMARY KEY(RecordKey, GroupKey) ); CREATE UNIQUE INDEX ixGroupRecord ON RecordTable(GroupKey, RecordKey); ในขณะที่ทางเทคนิคตารางของฉันแตกต่างกันเล็กน้อยและฉันกำลังเข้าร่วมในตารางอื่น ๆ ไม่กี่นี่เป็นพร็อกซีที่เหมาะสมสำหรับสถานการณ์ของฉัน ฉันต้องการเลือกทั้งหมดGroupKeysที่ไม่ใช่ชุดย่อยของอีกGroupKeyชุด …

3
ชื่อเครือข่ายที่ระบุไม่สามารถใช้ได้อีกต่อไป
เรามีแอพพลิเคชั่นที่เข้าถึงฐานข้อมูล (SQL Server 2014 Enterprise Edition) แอปพลิเคชันเรียกขั้นตอนที่เก็บไว้เพื่อเข้าถึงฐานข้อมูล ทุกอย่างทำงานได้ดีจนกระทั่งเมื่อเร็ว ๆ นี้เริ่มส่งข้อผิดพลาดต่อไปนี้และหยุดแอปพลิเคชัน การเริ่มต้นแอพใหม่แก้ไขปัญหาชั่วคราว แต่กลับพบข้อผิดพลาดเดิมหลัง ข้อผิดพลาด: ข้อผิดพลาดระดับการขนส่งเกิดขึ้นเมื่อได้รับผลลัพธ์จากเซิร์ฟเวอร์ (ผู้ให้บริการ: ผู้ให้บริการ TCP ข้อผิดพลาด: 0 - ชื่อเครือข่ายที่ระบุไม่มีให้บริการอีกต่อไป) ฉันทำวิจัยจำนวนมากซึ่งส่วนใหญ่ชี้ให้เห็นว่าเป็นปัญหาเครือข่าย แต่ไม่สามารถหาสิ่งใดเพื่อแก้ไขปัญหาได้จริง มีใครรู้บ้างว่าการเปลี่ยนแปลงใดที่ฉันควรจะทำในด้านฐานข้อมูลเพื่อแก้ไขปัญหานี้ ฉันขอขอบคุณข้อเสนอแนะใด ๆ

1
SQL Server - ทำไมฟังก์ชั่นของหน้าต่างจึงไม่ได้รับอนุญาตให้อัพเดทได้?
เมื่อใช้คำสั่งอัปเดตเช่นข้อความด้านล่างฉันได้รับข้อผิดพลาดที่แจ้งให้ฉันทราบ ฟังก์ชั่นที่มีหน้าต่างสามารถปรากฏได้ในคำสั่ง SELECT หรือ ORDER BY UPDATE dbo.Dim_Chart_of_Account SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) ฉันรู้ว่านี่สามารถทำงานได้อย่างง่ายดายโดยใช้ cte ที่อัพเดตได้เช่นด้านล่าง WITH my_cte AS ( SELECT [Account_Order], LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) AS acc_order_lag FROM Dim_Chart_of_Account ) UPDATE my_cte SET [Account_Order] = acc_order_lag คำถามของฉันคือมีเหตุผลใดบ้างที่ทำให้สิ่งนี้ไม่ได้รับอนุญาตในคำแถลงการปรับปรุงฉันควรหลีกเลี่ยงการใช้ cte ที่อัพเดตได้เป็นวิธีแก้ปัญหาหรือไม่ ความกังวลของฉันคือว่ามีปัญหาเมื่อใช้ฟังก์ชั่นหน้าต่างที่มีคำสั่งปรับปรุงและดังนั้นฉันต้องการที่จะเข้าใจว่านี่เป็นวิธีที่ยอมรับได้หรือควรหลีกเลี่ยง

2
SQL Server ไม่ได้ใช้หน่วยความจำทั้งหมด
ฉันมี SQL Server 2014 โดยมีหน่วยความจำสูงสุดตั้งไว้ที่ 6GB (หน่วยความจำกายภาพคือ 8GB) เซิร์ฟเวอร์เป้าหมายหน่วยความจำบางครั้ง 6GB แล้วลดลงกลับไปรวมเซิร์ฟเวอร์หน่วยความจำ (ประมาณ 5.3GB ไม่เคยถึง 6GB) ผมใช้committed_kbในsys.dm_os_sys_infoเพื่อตรวจสอบหน่วยความจำที่ใช้โดย SQL Server เมื่อฉันตรวจสอบsys.dm_os_buffer_descriptorsฉันเห็นว่าหน้าเว็บหลุดจากแคช - แต่ยังมีหน่วยความจำเหลืออยู่ 700MB หากไม่มีสิ่งใดต้องการหน่วยความจำคุณจะอธิบายข้อเท็จจริงที่ว่าหน้าถูกลบออกจากแคชได้อย่างไร ฉันคาดหวังว่า SQL Server จะลบหน้าเมื่อต้องการหน่วยความจำเท่านั้น ตาราง temp ที่จัดสรรคืนไม่มีปัญหาบนเซิร์ฟเวอร์นี้ My PLE คือ 3632 แคชโพรซีเดอร์คือ 2182 MB ฉันคาดว่าหน้าเว็บจะลดลงเมื่อไม่มีหน่วยความจำเหลือ แต่ฉันมี 700MB ฟรีหรือฉันเข้าใจผิด ใครช่วยกรุณาลองอธิบายพฤติกรรมนี้ได้ไหม SQL Server กำลังอ่านจากดิสก์ด้วยดังนั้นฉันคิดว่าฉันอาจสรุปได้ว่าไม่ใช่ทุกหน้าที่ต้องการอยู่ในหน่วยความจำ ฉันทำการค้นคว้าเพิ่มเติมและฉันอ่านหน้าจำนวนมากจากดิสก์ลงในหน่วยความจำและสังเกตเห็นบางสิ่งใน taskmanager ระหว่างการอ่าน: หน่วยความจำที่ใช้ไปเพิ่มขึ้นจาก 7.0GB …

1
ประสิทธิภาพของตารางในหน่วยความจำแย่กว่าตารางแบบดิสก์
ฉันมีตารางใน SQL Server 2014 ที่มีลักษณะดังต่อไปนี้: CREATE TABLE dbo.MyTable ( [id1] [bigint] NOT NULL, [id2] [bigint] NOT NULL, [col1] [int] NOT NULL default(0), [col2] [int] NOT NULL default(0) ) ด้วย (id1, id2) เป็น PK โดยพื้นฐานแล้ว id1 เป็นตัวระบุเพื่อจัดกลุ่มชุดผลลัพธ์ (id2, col1, col2) ซึ่ง pk คือ id2 ฉันพยายามใช้ตารางในหน่วยความจำเพื่อกำจัดตารางดิสก์ที่มีอยู่ซึ่งเป็นคอขวดของฉัน ข้อมูลในตารางถูกเขียน -&gt; อ่าน -&gt; ลบหนึ่งครั้ง ค่า …

6
ตัดช่องว่าง (ช่องว่างแท็บบรรทัดใหม่)
ฉันใช้ SQL Server 2014 และฉันต้องล้างช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของเนื้อหาคอลัมน์ซึ่งช่องว่างอาจเป็นช่องว่างแบบง่ายแท็บหรือการขึ้นบรรทัดใหม่ (ทั้ง\nและ\r\n) เช่น ' this content ' should become 'this content' ' \r\n \t\t\t this \r\n content \t \r\n ' should become 'this \r\n content' และอื่น ๆ ฉันสามารถทำได้เฉพาะกรณีแรกด้วย UPDATE table t SET t.column = LTRIM(RTRIM(t.column)) แต่สำหรับกรณีอื่น ๆ มันไม่ทำงาน

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