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

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

2
วิธีที่เร็วที่สุดในการแทรกแถวจำนวนมากคืออะไร?
ฉันมีฐานข้อมูลที่ฉันโหลดไฟล์ลงในตารางการแสดงละครจากตารางการแสดงนี้ฉันมี 1-2 ร่วมเพื่อแก้ไขคีย์ต่างประเทศแล้วใส่แถวนี้ลงในตารางสุดท้าย (ซึ่งมีหนึ่งพาร์ติชันต่อเดือน) ฉันมีข้อมูลประมาณ 3.4 พันล้านแถวสำหรับสามเดือน วิธีที่เร็วที่สุดในการดึงแถวเหล่านี้จากการจัดเตรียมลงในตารางสุดท้ายคืออะไร SSIS Data Flow Task (ที่ใช้มุมมองเป็นแหล่งที่มาและมีการโหลดที่ใช้งานอย่างรวดเร็ว) หรือคำสั่งแทรกลงใน SELECT ... ฉันลอง Data Flow Task และสามารถรับประมาณ 1 พันล้านแถวในเวลาประมาณ 5 ชั่วโมง (8 cores / 192 GB RAM บนเซิร์ฟเวอร์) ซึ่งรู้สึกช้ามากสำหรับฉัน

1
เหตุใดข้อความค้นหาทำให้เกิดการรั่วไหลของ tempdb
พื้นหลัง ฉันอยู่ในขั้นตอนการย้ายฐานข้อมูล 160GB จาก MSSQL 2008 (มาตรฐาน) บนเซิร์ฟเวอร์ Win 2008 ที่มี 48gb RAM ไปยังเซิร์ฟเวอร์ใหม่ที่ใช้ MSSQL 2012 (รุ่นเว็บ 64 บิต) ใน Win 2012 ด้วย 64GB ของ RAM เซิร์ฟเวอร์เก่าใช้งานได้และอยู่ระหว่างการโหลด เซิร์ฟเวอร์ใหม่ไม่ได้ใช้งานจริง เซิร์ฟเวอร์ใหม่มีไฟล์ 8 tempdb (แต่ละไฟล์ 4GB) ปัญหา ในการทดสอบบนเซิร์ฟเวอร์ใหม่ฉันเห็นขั้นตอนในการสอบถามจำนวนมากทำให้เกิดการแจ้งเตือนถึง "ผู้ดำเนินการใช้ tempdb เพื่อทำข้อมูลหกระหว่างการดำเนินการ" ฉันสามารถหลีกเลี่ยงการเรียงลำดับได้โดยเขียนคำค้นหาบางคำใหม่ แต่นี่ไม่ได้เป็นการแก้ปัญหาจริงๆ แบบสอบถามเดียวกันบนเซิร์ฟเวอร์เก่าไม่ทำให้เกิดการรั่วไหล ฉันได้อ่านว่าการรั่วไหลเกิดขึ้นเมื่อ MSSQL ไม่สามารถดำเนินการในหน่วยความจำจนเสร็จและต้องมีการหก / หน้าลงใน tempdb ฉันควรจะกังวลเกี่ยวกับการหกหรือไม่ ตัวอย่าง ฉันรัน …

3
RANK () และ DENSE_RANK () กำหนดขึ้นหรือไม่ได้กำหนดไว้หรือไม่
ตามBOL DENSE_RANK อย่างเป็นทางการของ Microsoftเป็น nondeterministic ( RANK () ) แต่ตามฟังก์ชั่นการจัดอันดับโดย Itzik Ben-Gan "... ฟังก์ชั่น RANK () และ DENSE_RANK () นั้นมักจะถูกกำหนด" ถูกต้องใคร สิ่งที่ฉันได้ค้นพบแล้ว: นิยามของ Microsoft "ฟังก์ชันกำหนดค่าจะส่งคืนผลลัพธ์เดียวกันทุกครั้งที่มีการเรียกใช้ด้วยชุดค่าอินพุตเฉพาะและกำหนดสถานะของฐานข้อมูลเดียวกัน" ดังนั้นใน Set ทฤษฎีตารางพนักงาน Employee Salary Sue Right 1.00 Robin Page 1.00 Phil Factor 1.00 และพนักงาน 2 Employee Salary Phil Factor 1.00 Sue Right 1.00 Robin …
27 sql-server 

2
Max Connection Pool ปกคลุมที่ 100
ฉันใช้ SQL Server 2008 R2 SP1 บนกล่อง Windows Server 2008 ฉันมี. สคริปต์ NET ที่ทำงานจาก Visual Studio 2010 ที่ทำสิ่งต่อไปนี้: เข้าถึงฐานข้อมูล ทำการเปลี่ยนแปลง iterates จำนวนครั้งทั้งหมดที่จะทำซ้ำคือ 150 แต่จะหยุดที่ 100 การเชื่อมต่อและฉันไม่สามารถหาสาเหตุ ฉันสามารถปรับสคริปท์ของฉันให้ใช้แค่เธรดเดียว แต่ฉันอยากรู้ว่าฉันขาดการตั้งค่าการเชื่อมต่อสูงสุดเพราะจะมีประโยชน์มากกว่าสำหรับการอ้างอิงในอนาคต นี่คือสิ่งที่ฉันตรวจสอบแล้ว: สตริงการเชื่อมต่อ SQL ใน Visual Studio 2010 (ตั้งค่าเป็น 1,000) คุณสมบัติการเชื่อมต่ออินสแตนซ์ฐานข้อมูล SSMS (ตั้งค่าเป็น 0 [อินฟินิตี้] การเชื่อมต่อผู้ใช้) Googled ข้อมูลบางอย่างใน Server 2008 ดูเหมือนว่าสามารถรองรับการเชื่อมต่อมากกว่า 100 รายการ …
27 sql-server 

4
ทำไมค่าใช้จ่ายโดยประมาณของ (เหมือนกัน) 1,000 ค้นหาในดัชนีที่ไม่ซ้ำกันแตกต่างกันในแผนเหล่านี้
ในแบบสอบถามด้านล่างแผนการดำเนินการทั้งคู่คาดว่าจะทำการค้นหา 1,000 ครั้งในดัชนีที่ไม่ซ้ำกัน การค้นหาถูกขับเคลื่อนโดยการสแกนที่สั่งในตารางแหล่งเดียวกันดังนั้นดูเหมือนว่าควรจะจบลงด้วยการค้นหาค่าเดียวกันในลำดับเดียวกัน ทั้งลูปซ้อนกันมี <NestedLoops Optimized="false" WithOrderedPrefetch="true"> ใครรู้ว่าทำไมงานนี้มีราคาอยู่ที่ 0.172434 ในแผนแรก แต่ 3.01702 ต่อวินาที (เหตุผลของคำถามคือคำถามแรกที่เสนอให้ฉันเป็นการเพิ่มประสิทธิภาพเนื่องจากราคาแผนต่ำกว่ามากจริง ๆ แล้วดูเหมือนว่าฉันจะทำงานได้มากกว่า แต่ฉันพยายามอธิบายความแตกต่าง .. .) ติดตั้ง CREATE TABLE dbo.Target(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); CREATE TABLE dbo.Staging(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); INSERT INTO dbo.Target SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER …

3
ขั้นตอนการจัดเก็บเทียบกับแบบอินไลน์ SQL
ฉันรู้ว่าขั้นตอนการจัดเก็บมีประสิทธิภาพมากขึ้นผ่านเส้นทางการดำเนินการ (กว่า inline sql ในแอปพลิเคชัน) อย่างไรก็ตามเมื่อกดฉันไม่ได้รู้เรื่องทำไม ฉันต้องการทราบเหตุผลทางเทคนิคสำหรับเรื่องนี้ (ในแบบที่ฉันสามารถอธิบายให้ใครบางคนในภายหลัง) ใครสามารถช่วยฉันสร้างคำตอบที่ดีได้บ้าง

1
การตัดฟิลด์ Varchar (สูงสุด) หลังจาก 8000 ตัวอักษร
varchar(max)ผมมีข้อมูลในการจัดเก็บข้อมูลบางข้อมูลที่มีการประกาศให้เป็น เพื่อความเข้าใจของฉันนี้ควรเก็บ2^31 - 1อักขระ แต่เมื่อฉันป้อนเนื้อหาบางส่วนมากกว่า 8000 ตัวอักษรมันตัดส่วนที่เหลือออก ฉันได้ตรวจสอบแล้วว่าข้อมูลทั้งหมดรวมอยู่ในคำสั่งการปรับปรุงของฉันและแบบสอบถามดูดีทุกที่อื่น แต่เมื่อฉันเลือกข้อมูลกลับมันถูกตัดออกไป ข้อมูลถูกตัดทอนเมื่อฉันแสดงบนเว็บไซต์ของฉันและเมื่อฉันใช้ SSMS select content from tableด้วย select DATALENGTH (content) from table กลับมาเป็น 8000 ฉันตั้งค่าข้อมูลโดยใช้สิ่งนี้: update table set content = 'my long content' where id = 1. เนื้อหามี HTML จำนวนมาก แต่ฉันไม่เห็นสาเหตุที่ทำให้เกิดปัญหา สิ่งเดียวที่ฉันเห็นว่าฉันกำลังทำอยู่คือแทนที่ทั้งหมด"ด้วย''สิ่งนี้คือเนื้อหาที่ผู้ใช้ป้อน (จำไม่ได้ว่าทำไมฉันถึงทำตอนนี้) ฉันจัดการเพื่อให้เนื้อหาเข้าสู่อย่างถูกต้องโดยลบเครื่องหมายคำพูดเดี่ยวทั้งหมดในเนื้อหาดังนั้นฉันคิดว่ามีบางสิ่งผิดปกติเกิดขึ้นกับข้อมูลของฉันมากกว่าฐานข้อมูล ฉันควรจะทำสิ่งพิเศษกับแบบสอบถามเพื่อใช้varchar(max)เขตข้อมูลหรือไม่ การใช้: SQL Server 2008 (10.50) 64 บิต

6
ทำไมแบบสอบถาม SELECT DISTINCT TOP N ของฉันจึงสแกนทั้งตาราง
ฉันใช้SELECT DISTINCT TOP Nแบบสอบถามน้อยซึ่งดูเหมือนว่าจะเพิ่มประสิทธิภาพไม่ดีโดยเพิ่มประสิทธิภาพแบบสอบถาม SQL Server เริ่มจากการพิจารณาตัวอย่างเล็ก ๆ น้อย ๆ : ตารางหนึ่งล้านแถวที่มีสองค่าสลับกัน ฉันจะใช้ฟังก์ชันGetNumsเพื่อสร้างข้อมูล: DROP TABLE IF EXISTS X_2_DISTINCT_VALUES; CREATE TABLE X_2_DISTINCT_VALUES (PK INT IDENTITY (1, 1), VAL INT NOT NULL); INSERT INTO X_2_DISTINCT_VALUES WITH (TABLOCK) (VAL) SELECT N % 2 FROM dbo.GetNums(1000000); UPDATE STATISTICS X_2_DISTINCT_VALUES WITH FULLSCAN; สำหรับแบบสอบถามต่อไปนี้: SELECT DISTINCT …

4
SQL“ ตารางที่ว่าง” ช้าลงหลังจากลบระเบียนทั้งหมด (12 ล้าน)?
ฉันมีอินสแตนซ์ SQL Server 2008 ที่มีคอลัมน์ประมาณ 150 คอลัมน์ ก่อนหน้านี้ฉันได้เติมข้อมูลตารางนี้ด้วยรายการประมาณ 12 ล้านรายการ แต่หลังจากนั้นจึงล้างตารางเพื่อเตรียมชุดข้อมูลใหม่ อย่างไรก็ตามคำสั่งที่เคยวิ่งทันทีบนโต๊ะว่างเช่น count(*)และselect top 1000ในSQL Management Studioตอนนี้พามหายุคให้ทำงาน SELECT COUNT(*) FROM TABLE_NAME ใช้เวลามากกว่า 11 นาทีเพื่อส่งคืน 0 และSELECT TOP 1000ใช้เวลาเกือบ 10 นาทีเพื่อส่งคืนตารางเปล่า ฉันยังสังเกตเห็นว่าพื้นที่ว่างบนฮาร์ดไดรฟ์ของฉันได้หายไปอย่างแท้จริง (ลดลงจากประมาณ 100G ถึง 20G) สิ่งเดียวที่เกิดขึ้นระหว่างคือแบบสอบถามเดียวที่ฉันวิ่ง: DELETE FROM TABLE_NAME เกิดอะไรขึ้นในโลกนี้!


4
วิธีการเปลี่ยนการเปรียบเทียบของ SQL Server
ฉันจะเปลี่ยนการเปรียบเทียบค่าเริ่มต้นของ SQL Server 2008 R2 Express สำหรับเซิร์ฟเวอร์ทั้งหมดและฐานข้อมูลเฉพาะได้อย่างไร มีวิธีการใช้อินเทอร์เฟซภาพของ SQL Server Management Studio หรือไม่? ในหน้าต่างคุณสมบัติเซิร์ฟเวอร์ (และในหน้าต่างคุณสมบัติฐานข้อมูลที่สอดคล้องกัน) คุณสมบัตินี้ไม่สามารถแก้ไขได้

2
วิธีใช้ COALESCE กับหลายแถวและไม่มีเครื่องหมายจุลภาคก่อนหน้า
ฉันกำลังพยายามทำสิ่งต่อไปนี้: California | Los Angeles, San Francisco, Sacramento Florida | Jacksonville, Miami น่าเสียดายที่ฉันได้รับ ", Los Angeles, San Francisco, Sacramento, Jacksonville, Miami" ฉันสามารถบรรลุผลลัพธ์ที่ต้องการโดยใช้ฟังก์ชั่น STUFF แต่สงสัยว่ามีวิธีที่สะอาดกว่าในการทำโดยใช้ COALESCE หรือไม่ STATE | CITY California | San Francisco California | Los Angeles California | Sacramento Florida | Miami Florida | Jacksonville DECLARE @col NVARCHAR(MAX); SELECT …
27 sql-server  t-sql 

1
สถิติเก็บอยู่ใน SQL Server อยู่ที่ไหน
สถิติที่ใช้โดยเครื่องมือเพิ่มประสิทธิภาพข้อความค้นหาเก็บอยู่ในไฟล์ฐานข้อมูล SQL Server และบัฟเฟอร์พูลหรือไม่ โดยเฉพาะอย่างยิ่งมีวิธีที่จะคิดออกหน้าใช้สถิติโดยใช้ DMVs และ / หรือ DBCC หรือไม่ ฉันเป็นเจ้าของทั้ง SQL Server 2008 Internals และ SQL Server Internals และการแก้ไขปัญหาหนังสือและไม่มีใครพูดถึงโครงสร้างทางกายภาพของสถิติ หากพวกเขาฉันไม่สามารถค้นหาข้อมูลนี้

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

5
วิธีที่ดีที่สุดในการรับคำสั่งซื้อแบบสุ่มคืออะไร
ฉันมีแบบสอบถามที่ฉันต้องการให้บันทึกผลลัพธ์เป็นแบบสุ่ม มันใช้ดัชนีคลัสเตอร์ดังนั้นถ้าฉันไม่รวมorder byมันก็จะกลับระเบียนในลำดับของดัชนีที่ ฉันจะมั่นใจได้อย่างไรว่าการสั่งซื้อแบบสุ่มแถว ฉันเข้าใจว่ามันอาจจะไม่สุ่ม "จริง" หลอกหลอกก็ดีพอสำหรับความต้องการของฉัน
27 sql-server 

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