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

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

1
การแก้ไขปัญหา SOS_SCHEDULER_YIELD รอ
ใช้ ERP ในองค์กรของเรา (Dynamics AX 2012) ฉันสังเกตว่าสภาพแวดล้อมการผลิตของเรานั้นช้ากว่าระบบการพัฒนาของเรามาก หลังจากทำกิจกรรมเดียวกันทั้งในสภาพแวดล้อมการพัฒนาและการใช้งานจริงในขณะทำการสืบค้นกลับฉันยืนยันว่าข้อความค้นหา SQL กำลังทำงานช้ามากในสภาพแวดล้อมการผลิตของเราเมื่อเทียบกับการพัฒนา (เฉลี่ย 10-50x ช้ากว่า) ตอนแรกฉันอ้างว่าสิ่งนี้เพื่อโหลดและเรียกใช้กิจกรรมเดียวกันอีกครั้งในสภาพแวดล้อมการผลิตในช่วงนอกเวลาทำงานและพบผลลัพธ์เดียวกันในการติดตาม ฉันล้างสถิติการรอของฉันใน SQL Server แล้วปล่อยให้เซิร์ฟเวอร์ทำงานภายใต้ปริมาณการผลิตตามปกติชั่วครู่หนึ่งจากนั้นเรียกใช้แบบสอบถามนี้: WITH [Waits] AS (SELECT [wait_type], [wait_time_ms] / 1000.0 AS [WaitS], ([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS], [signal_wait_time_ms] / 1000.0 AS [SignalS], [waiting_tasks_count] AS [WaitCount], 100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() …


4
การเข้าร่วมได้รับการปรับให้เหมาะสมกับส่วนคำสั่งที่ runtime หรือไม่
เมื่อฉันเขียนแบบสอบถามเช่นนี้ ... select * from table1 t1 join table2 t2 on t1.id = t2.id เครื่องมือเพิ่มประสิทธิภาพ SQL ไม่แน่ใจว่าเป็นคำที่ถูกต้องแปลว่าเป็น ... select * from table1 t1, table2 t2 where t1.id = t2.id โดยพื้นฐานแล้วคำสั่งเข้าร่วมใน SQL Server เป็นวิธีที่ง่ายกว่าในการเขียน sql หรือไม่ หรือใช้จริงในเวลาทำงาน? แก้ไข: ฉันเกือบจะตลอดและจะใช้เข้าร่วมไวยากรณ์ ฉันแค่อยากรู้ว่าเกิดอะไรขึ้น

1
วิธีจัดการข้อมูล 3.1 พันล้านแถว
ขณะนี้ฉันได้รับมอบหมายให้ติดตั้งสกีมาหน่วยเก็บข้อมูลสำหรับข้อมูลจำนวนมาก ข้อมูลจะถูกเข้าถึงเป็นหลักเพื่อกำหนดdata pointค่าปัจจุบันแต่ฉันก็ต้องติดตามประวัติหกเดือนที่ผ่านมาสำหรับแนวโน้ม / วิเคราะห์ข้อมูล มีการเพิ่มข้อกำหนดล่าสุดเพื่อติดตามmin/ max/ sumค่าสำหรับชั่วโมงที่ผ่านมา หมายเหตุ: โดยหลักการแล้วฉันต้องการพิจารณาตัวเลือก MongoDB แต่ฉันต้องแสดงให้เห็นว่าฉันได้ใช้ตัวเลือก SQL-Server หมดแล้ว ข้อมูล ตารางต่อไปนี้แสดงถึงแหล่งข้อมูลหลัก (สอบถามบ่อยที่สุด) ตารางจะมีแถวประมาณห้าล้านแถว การเปลี่ยนแปลงข้อมูลส่วนใหญ่จะเป็นUPDATEคำสั่งที่มีข้อความเป็นครั้งคราวมากINSERTหลังจากการโหลดข้อมูลเริ่มต้น ฉันเลือกที่จะจัดกลุ่มข้อมูลตามdataPointIdที่คุณจะเลือกall values for a given data pointเสมอ // Simplified Table CREATE TABLE [dbo].[DataPointValue]( [dataPointId] [int] NOT NULL, [valueId] [int] NOT NULL, [timestamp] [datetime] NOT NULL, [minimum] [decimal](18, 0) NOT NULL, [hourMinimum] …

5
GUID ตามลำดับหรือใหญ่สำหรับตารางฐานข้อมูล 'ใหญ่' PK
ฉันรู้ว่าคำถามประเภทนี้เกิดขึ้นมากมาย แต่ฉันยังไม่ได้อ่านข้อโต้แย้งที่น่าสนใจใด ๆ เพื่อช่วยในการตัดสินใจ กรุณาทนกับฉัน! ฉันมีฐานข้อมูลขนาดใหญ่ - มันเติบโตประมาณ 10,000,000 รายการต่อวัน ข้อมูลมีความสัมพันธ์และสำหรับเหตุผลด้านประสิทธิภาพฉันโหลดตารางด้วย BULK COPY ด้วยเหตุนี้ฉันจำเป็นต้องสร้างคีย์สำหรับแถวและไม่สามารถพึ่งพาคอลัมน์ตัวตน เลขจำนวนเต็ม 64- บิต - ใหญ่ - กว้างพอสำหรับฉันที่จะใช้ แต่เพื่อรับประกันเอกลักษณ์ฉันต้องมีเครื่องกำเนิดส่วนกลางเพื่อสร้าง ID ของฉันให้ฉัน ขณะนี้ฉันมีบริการตัวสร้างซึ่งอนุญาตให้บริการสำรองหมายเลขลำดับ X และรับประกันว่าไม่มีการชนกัน อย่างไรก็ตามผลที่ตามมาก็คือบริการทั้งหมดที่ฉันเชื่อถือได้จากเครื่องกำเนิดไฟฟ้าส่วนกลางนี้และดังนั้นฉันจึงถูก จำกัด ในวิธีที่ฉันสามารถกระจายระบบของฉันและฉันไม่พอใจกับการพึ่งพาอื่น ๆ (เช่นต้องใช้การเข้าถึงเครือข่าย) โดยการออกแบบนี้ นี่เป็นปัญหาในบางโอกาส ตอนนี้ฉันกำลังพิจารณาการใช้ GUID ตามลำดับเป็นคีย์หลักของฉัน (สร้างจาก SQL ภายนอก) เท่าที่ฉันสามารถตรวจสอบได้จากการทดสอบของฉันเองข้อเสียเปรียบเพียงอย่างเดียวคือค่าใช้จ่ายในพื้นที่ดิสก์ของประเภทข้อมูลที่กว้างขึ้น (ซึ่งเป็นที่มาจากการใช้งานในดัชนี) ฉันไม่ได้เห็นการชะลอตัวที่มองเห็นได้ในประสิทธิภาพการค้นหาเมื่อเทียบกับทางเลือกที่ใหญ่ การโหลดตารางด้วย BULK COPY ช้ากว่าเล็กน้อย แต่ไม่มากนัก ดัชนีที่ใช้ GUID …

2
รายการการเข้าสู่ระบบเซิร์ฟเวอร์ SQL ที่มีอยู่และผู้ใช้
ฉันรู้ว่าเราสามารถตรวจสอบการเข้าสู่ระบบและผู้ใช้ที่กำหนดโดยใช้ GUI ใน SQL Server แต่ฉันสงสัยว่าเราสามารถตรวจสอบนี้ได้โดยใช้สคริปต์ ฉันเรียกใช้แบบสอบถามด้านล่าง แต่แสดงให้เห็นว่า Principal_id ซึ่งฉันไม่แน่ใจว่าจะแมปอย่างไรเพื่อรับระดับสิทธิ์ SELECT * FROM Sys.login_token ดังนั้นจึงมี proc ที่เก็บไว้ในตัวที่สามารถแสดงรายการการเข้าสู่ระบบและผู้ใช้ที่มีระดับสิทธิ์ของพวกเขา ? ขอขอบคุณ.

4
เป็นไปได้ไหมที่จะเพิ่มประสิทธิภาพการสืบค้นในตารางแคบ ๆ ที่มีแถวนับล้านแถว
ฉันมีข้อความค้นหาที่ใช้เวลาโดยเฉลี่ย 2,500 มิลลิวินาทีในการดำเนินการให้เสร็จสมบูรณ์ ตารางของฉันแคบมาก แต่มี 44 ล้านแถว ฉันมีตัวเลือกอะไรบ้างในการปรับปรุงประสิทธิภาพหรือตัวเลือกนี้ดีเท่าที่ได้รับ คำค้นหา SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; โต๊ะ CREATE TABLE [dbo].[Heartbeats]( [ID] [int] IDENTITY(1,1) NOT NULL, [DeviceID] [int] NOT NULL, [IsPUp] [bit] NOT NULL, [IsWebUp] [bit] NOT NULL, [IsPingUp] [bit] NOT NULL, [DateEntered] [datetime] NOT NULL, …

3
ดิสก์ระบบมีเนื้อที่ไม่เพียงพอเมื่อเรียกใช้แบบสอบถาม SQL จำนวนมากใน SQL Server 2012
ฉันค่อนข้างใหม่กับ SQL Server 2012 ฉันจะขอบคุณถ้ามีคนช่วย ฉันกู้คืนสำเนาของฐานข้อมูลขนาดใหญ่เป็น SQL Server 2012 และฉันพยายามเรียกใช้แบบสอบถามแบบง่าย ๆ ฉันพยายามเรียกใช้แบบสอบถามแบบใช้เลือกข้อมูลกับตารางของฐานข้อมูล136898115บรรทัด SELECTแบบสอบถามนี้มีWHEREข้อง่าย ๆเท่านั้น ทุกครั้งที่ฉันเรียกใช้คิวรีนี้มันล้มเหลวเพราะดิสก์ของระบบ (พาร์ติชันที่ติดตั้ง Windows - C:\) หมดพื้นที่ (พาร์ติชันนี้มีพื้นที่ว่างเพียง 6GB) และฉันไม่เข้าใจว่าทำไม ฉันกำหนด tempdb ของฉันให้อยู่ในไดรฟ์อื่นซึ่งมีพื้นที่ว่างมากกว่า 14 เทราไบต์ แน่นอนว่าฐานข้อมูลของฉันอยู่ในไดรฟ์อื่นเช่นกัน อะไรทำให้พาร์ติชั่นระบบของฉันไม่มีที่ว่าง? มันเป็นไฟล์หน้าหรือไม่

1
ฉันจะทราบได้อย่างไรว่า * ทำไม * ผู้ใช้มีสิทธิ์ที่มีประสิทธิภาพบางอย่าง
ฉันรู้ว่าฉันสามารถสอบถามสิทธิ์ที่มีประสิทธิภาพโดยใช้sys.fn_my_permissions: USE myDatabase; SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT') entity_name | subentity_name | permission_name ------------------------------------------------ dbo.myTable | | SELECT dbo.myTable | | UPDATE ... สิ่งนี้บอกฉันว่าผู้ใช้ปัจจุบันมีสิทธิ์ SELECT, INSERT, UPDATE และอื่น ๆmyTableในฐานข้อมูลmyDatabaseหรือไม่ เป็นไปได้ไหมที่จะค้นหาสาเหตุที่ผู้ใช้มีสิทธิ์เหล่านี้อย่างง่ายดาย ตัวอย่างเช่นฉันชอบมีฟังก์ชันfn_my_permissions_exที่แสดงreasonคอลัมน์เพิ่มเติม: USE myDatabase; SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT') entity_name | subentity_name | permission_name | reason ------------------------------------------------------------------------------------------------------------------------------------ dbo.myTable | | SELECT …

3
แบบสอบถาม SQL Server ช้าเมื่อแบ่งหน้า
ฉันเห็นพฤติกรรมแปลก ๆ ด้วยแบบสอบถาม T-SQL ต่อไปนี้ใน SQL Server 2012: SELECT Id FROM dbo.Person WHERE CONTAINS(Name, '"John" AND "Smith"') ORDER BY Name การดำเนินการค้นหานี้เพียงอย่างเดียวทำให้ฉันมีผลลัพธ์ประมาณ 1,300 รายการในเวลาน้อยกว่าสองวินาที (มีดัชนี fulltext เปิดอยู่Name) อย่างไรก็ตามเมื่อฉันเปลี่ยนแบบสอบถามเป็น: SELECT Id FROM dbo.Person WHERE CONTAINS(Name, '"John" AND "Smith"') ORDER BY Name OFFSET 0 rows FETCH NEXT 10 ROWS ONLY ใช้เวลามากกว่า 20 วินาทีในการให้ผลลัพธ์ …

5
ปรับปรุงประสิทธิภาพของ sys.dm_db_index_physical_stats
ในระหว่างงานซ่อมบำรุงฉันพยายามหารายการดัชนีแยกส่วน แต่แบบสอบถามช้ามากและใช้เวลากว่า 30 นาทีในการดำเนินการ ฉันคิดว่านี่เป็นเพราะการสแกนระยะไกลบน sys.dm_db_index_physical_stats มีวิธีใดบ้างที่จะเพิ่มความเร็วคิวรีต่อไปนี้: SELECT OBJECT_NAME(i.OBJECT_ID) AS TableName, i.name AS TableIndexName FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') phystat INNER JOIN sys.indexes i ON i.OBJECT_ID = phystat.OBJECT_ID AND i.index_id = phystat.index_id WHERE phystat.avg_fragmentation_in_percent > 20 AND OBJECT_NAME(i.OBJECT_ID) IS NOT NULL ORDER BY phystat.avg_fragmentation_in_percent DESC ฉันไม่ใช่ DBA และอาจทำให้เกิดข้อผิดพลาดอย่างชัดเจนในแบบสอบถามด้านบนหรืออาจมีดัชนีหรือสถิติบางอย่างที่จะช่วยได้ บางทีมันอาจเป็นเพียงขนาดของฐานข้อมูล …

4
รวมคอลัมน์จากหลายแถวเป็นแถวเดียว
ฉันได้customer_commentsแบ่งออกเป็นหลายแถวเนื่องจากการออกแบบฐานข้อมูลและสำหรับรายงานที่ฉันต้องรวมcommentsจากแต่ละที่ไม่ซ้ำกันidเป็นหนึ่งแถว ก่อนหน้านี้ฉันเคยลองบางสิ่งบางอย่างที่ทำงานกับรายการที่มีการคั่นจาก SELECT clause และเคล็ดลับCOALESCEแต่ฉันจำไม่ได้และต้องไม่บันทึกไว้ ฉันไม่สามารถทำให้มันทำงานได้ในกรณีนี้ดูเหมือนว่าจะทำงานในแถวเดียวเท่านั้น ข้อมูลมีลักษณะดังนี้: id row_num customer_code comments ----------------------------------- 1 1 Dilbert Hard 1 2 Dilbert Worker 2 1 Wally Lazy ผลลัพธ์ของฉันต้องมีลักษณะเช่นนี้: id customer_code comments ------------------------------ 1 Dilbert Hard Worker 2 Wally Lazy ดังนั้นสำหรับแต่ละrow_numผลลัพธ์จะมีแถวเดียวเท่านั้น row_numความคิดเห็นที่ควรจะรวมอยู่ในคำสั่งของ SELECTเคล็ดลับที่ถูกเชื่อมโยงข้างต้นนั้นใช้เพื่อให้ได้ค่าทั้งหมดสำหรับการสืบค้นที่เฉพาะเจาะจงเป็นหนึ่งแถว แต่ฉันไม่สามารถหาวิธีที่จะทำให้การทำงานเป็นส่วนหนึ่งของSELECTคำสั่งที่แยกแถวเหล่านี้ออกทั้งหมด ข้อความค้นหาของฉันต้องผ่านทั้งตารางด้วยตัวเองและออกแถวเหล่านี้ ฉันไม่ได้รวมมันไว้ในหลายคอลัมน์หนึ่งแถวสำหรับแต่ละแถวดังนั้นจึงPIVOTดูเหมือนไม่เกี่ยวข้อง

4
SQL Server 2012 เข้ากันได้แบบย้อนหลังสำหรับการสำรองข้อมูลกับ 2008
ฉันมีลูกค้าจำนวนมากที่มี SQL Server 2008 และนั่นคือสิ่งที่ฉันมีที่นี่บนเซิร์ฟเวอร์ของฉันด้วย ฉันใช้ไฟล์สำรองเพื่อส่งฐานข้อมูลไปมาระหว่างลูกค้าและที่สำนักงานของฉัน ฉันได้อ่านแล้วว่าเมื่อคุณสร้างการสำรองข้อมูลจาก SQL Server 2012 จะไม่มีวิธีการคืนค่าไปยังอินสแตนซ์ปี 2008 ฉันสันนิษฐานว่าระดับความเข้ากันได้จะดูแลปัญหานี้ แต่ก็ไม่เป็นเช่นนั้น ดังนั้นฉันกำลังสูญเสียว่าจะอัพเกรดอย่างไร นอกเหนือจากการอัปเกรดลูกค้าของฉันทั้งหมดในครั้งเดียวซึ่งเป็นไปไม่ได้ฉันไม่คิดว่าจะทำเช่นนี้ได้ ฉันต้องการส่งฐานข้อมูลไปยังลูกค้ารวมทั้งรับฐานข้อมูลจากลูกค้า นี่เป็นการอัปเกรดเวอร์ชันแรกของฉันบน SQL Server ดังนั้นฉันใหม่กับปัญหานี้ มีความคิดเห็นเกี่ยวกับวิธีการดำเนินการอย่างไร
14 sql-server 

3
ฉันจะกำหนดค่าอาร์เรย์ RAID ของไดรฟ์ SSD บน SQL Server ได้อย่างไร
ฉันกำลังสร้าง SQL Server ที่มี RAM 48 GB, 1 CPU, & 8 SATA III (6GB / s) ไดรฟ์ SSD (128 GB Crucial m4) และคอนโทรลเลอร์ LSI MegaRAID (SAS 9265-8i) ฉันคาดว่างานโหลดทั่วไปส่วนใหญ่จะอ่าน จะมีบางช่วงของกิจกรรมการเขียนที่หนักกว่า (ซิงค์ข้อมูลรายชั่วโมงกับผู้ให้บริการข้อมูลบุคคลที่สาม - การสำรองข้อมูลทุกคืน) แต่ฉันสงสัยว่าอัตราส่วนการอ่าน / เขียนทั่วไปประมาณ 90% อ่าน / 10% เขียน ตัวเลือกที่ 1: ไดรฟ์แบบลอจิคัล C: - RAID 1 (ไดรฟ์ทางกายภาพ 2 ตัว) …

2
การจัดเก็บข้อมูลจำนวนมากจากอาร์เรย์เซ็นเซอร์
ฉันได้รับมอบหมายให้ใช้โซลูชัน (แอพและฐานข้อมูล) เพื่อเก็บตัวอย่างข้อมูลจากอาร์เรย์เซ็นเซอร์ขนาดใหญ่ อาร์เรย์ในปัจจุบันประกอบด้วยเซ็นเซอร์ประมาณ 20,000 ตัว แต่ในไม่ช้าจะมีการเติบโตสูงถึง 100,000 เซ็นเซอร์ เซ็นเซอร์แต่ละตัวจะส่งตัวอย่างข้อมูลทุก ๆ 10 วินาทีและแต่ละตัวอย่างมีขนาด 28 ไบต์ การทำผลรวมจึงนำไปสู่: 8640 ตัวอย่างต่อเซ็นเซอร์ต่อวัน ข้อมูล 242kB ต่อเซ็นเซอร์ต่อวัน 864 ล้านตัวอย่างต่อวัน ตอนนี้ฉันสงสัยว่าวิธีที่ดีที่สุดในการจัดเก็บ / ดึงข้อมูลคืออะไร? ฉัน "เข้าร่วม" โครงการนี้หลังจากที่ซอฟต์แวร์ได้ถูกระบุไว้แล้วดังนั้นจึงต้องดำเนินการบนแพลตฟอร์ม Windows โดยใช้ SQL Server โซลูชันปัจจุบันในหัวของฉันคือการสร้างฐานข้อมูลที่มีสองตารางเพื่อเก็บตัวอย่างข้อมูล ตัวแรกทำหน้าที่จัดเรียงของดัชนีเป็นวินาทีที่เก็บตัวอย่างที่เรียงไว้ในเขตข้อมูลไบนารีในแต่ละวันต่อเซ็นเซอร์พื้นฐาน: Table 1: RecordID - BigInt - Identity SensorID - BigInt - Primary Key Date - …

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