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

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

3
วิธีรับการใช้งาน CPU ตามฐานข้อมูลสำหรับอินสแตนซ์เฉพาะ
ฉันพบข้อความค้นหาต่อไปนี้เพื่อตรวจจับการใช้งาน CPU ตามฐานข้อมูล แต่มีการแสดงผลลัพธ์ที่แตกต่าง: WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], …

1
ฉันจะออกแบบแบบสอบถามเพื่อหยุดชั่วคราว / พัก / รอเป็นระยะเวลาที่กำหนดได้อย่างไร
ฉันกำลังทดสอบแอปพลิเคชันตรวจสอบกับอินสแตนซ์ SQL Server 2000 ฉันจะเขียนเคียวรี T-SQL ที่ใช้เวลาในการระบุได้อย่างไร ตัวอย่างเช่นภาษาสคริปต์ส่วนใหญ่มีSLEEPคำสั่งที่ให้คุณหยุดการทำงานของสคริปต์ชั่วคราวตามเวลาที่กำหนด ฉันกำลังมองหาสิ่งที่คล้ายกันที่เข้ากันได้กับ SQL Server 2000 นี่คือจุดประสงค์เพื่อทดสอบการตั้งค่าขีด จำกัด การสืบค้นที่ใช้งานได้ยาวนานของแอปพลิเคชันการตรวจสอบ


4
SQL Server บน Mac
สามารถติดตั้งฉบับด่วนของเอ็นจินเซิร์ฟเวอร์ SQL ได้บน OS X ฉันใช้ MacBook ที่บ้านและต้องการใช้เป็นแพลตฟอร์มทดสอบ / เรียนรู้สำหรับ SQL Server

2
ใน SQL Server ฉันควรบังคับ LOOP JOIN ในกรณีต่อไปนี้หรือไม่
โดยทั่วไปฉันแนะนำไม่ให้ใช้คำแนะนำการเข้าร่วมด้วยเหตุผลมาตรฐานทั้งหมด อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันได้พบรูปแบบที่ฉันมักจะพบว่าวงบังคับที่ถูกบังคับให้ทำงานได้ดีขึ้น ในความเป็นจริงฉันเริ่มใช้และแนะนำมันมากจนฉันต้องการได้รับความเห็นที่สองเพื่อให้แน่ใจว่าฉันจะไม่พลาดบางสิ่งบางอย่าง นี่คือสถานการณ์จำลอง (รหัสที่เจาะจงมากในการสร้างตัวอย่างคือตอนท้าย): --Case 1: NO HINT SELECT S.* INTO #Results FROM #Driver AS D JOIN SampleTable AS S ON S.ID = D.ID --Case 2: LOOP JOIN HINT SELECT S.* INTO #Results FROM #Driver AS D INNER LOOP JOIN SampleTable AS S ON S.ID = D.ID …
15 sql-server 

3
รับจำนวนการตรวจสอบและจำนวนการพิมพ์จากข้อมูลการสูญเสียผลเสมอ
ฉันทำSQL Fiddleสำหรับคำถามนี้ถ้านั่นทำให้ทุกคนง่ายขึ้น ฉันมีฐานข้อมูลกีฬาแนวแฟนตาซีและสิ่งที่ฉันพยายามคิดคือทำอย่างไรกับข้อมูล "แนวปัจจุบัน" (เช่น 'W2' หากทีมชนะการแข่งขัน 2 นัดสุดท้ายหรือ 'L1' หากพวกเขาแพ้ นัดสุดท้ายของพวกเขาหลังจากชนะนัดก่อนหน้า - หรือ 'T1' ถ้าพวกเขาเสมอนัดล่าสุด นี่คือสคีมาพื้นฐานของฉัน: CREATE TABLE FantasyTeams ( team_id BIGINT NOT NULL ) CREATE TABLE FantasyMatches( match_id BIGINT NOT NULL, home_fantasy_team_id BIGINT NOT NULL, away_fantasy_team_id BIGINT NOT NULL, fantasy_season_id BIGINT NOT NULL, fantasy_league_id BIGINT NOT NULL, fantasy_week_id …

1
เหตุใดจึงไม่มีประเภทจำนวนเต็มที่ไม่ได้ลงชื่อในแพลตฟอร์มฐานข้อมูลด้านบน
ฐานข้อมูลมักจะปรับแต่งได้มากด้วยชนิดข้อมูลที่แตกต่างกันและความยาวที่กำหนดเอง มันทำให้ฉันประหลาดใจเนื่องจากฉันพยายามค้นหาไวยากรณ์เพื่อใช้unsigned intชนิดที่ไม่สามารถใช้ได้จากทั้ง PostgreSQL และ MS SQL Server MySQL และ Oracle ดูเหมือนจะ ดูเหมือนว่าการละเลยที่เห็นได้ชัดในส่วนของพวกเขา - ตัวเลือก perfomant ที่ดีที่สุดถัดไปคือ long / bigint, (จำนวนเต็ม 8 ไบต์) แต่อาจไม่จำเป็นอย่างสมบูรณ์! ไม่มีใครรู้ว่าทำไมพวกเขาถึงเลือกที่จะไม่รวมการสนับสนุน int แบบไม่ได้ลงนาม?

3
SQL Server ไม่ได้ใช้คอร์ / เธรดของ CPU ทั้งหมด
หลังจากอัปเกรดฮาร์ดแวร์ของ SQL Server ของเราเราสังเกตเห็นในตัวจัดการงานของ Windows ว่าอินสแตนซ์ SQL นั้นใช้เพียงครึ่งหนึ่งของเธรดที่มีให้: . เซิร์ฟเวอร์มีฮาร์ดแวร์และซอฟต์แวร์ต่อไปนี้: Windows 2008 R2 Enterprise 64 บิต SP1 Intel Xeon E7-4870 - โปรเซสเซอร์ 4 ตัว (40 คอร์, 80 เธรด) Microsoft SQL Server 2012 Enterprise Edition (64 บิต) วิ่งselect cpu_count from sys.dm_os_sys_infoกลับ 40 ระบบปฏิบัติการเห็น 80 กระทู้ทั้งหมด เหตุใดจึงใช้กำลังการประมวลผลของเซิร์ฟเวอร์เพียงครึ่งเดียว เรามีฮาร์ดแวร์และซอฟต์แวร์เดียวกันบนเซิร์ฟเวอร์สองเครื่องและทั้งคู่มีพฤติกรรมเหมือนกัน

3
การปรับลำดับชั้นของ CTE ให้เหมาะสม
อัปเดตด้านล่าง ฉันมีตารางบัญชีที่มีสถาปัตยกรรมบัญชี acct / parent โดยทั่วไปเพื่อแสดงลำดับชั้นของบัญชี (SQL Server 2012) ฉันสร้างมุมมองโดยใช้ CTE เพื่อตัดลำดับชั้นและโดยรวมแล้วทำงานได้อย่างสวยงามและตามที่ตั้งใจไว้ ฉันสามารถสอบถามลำดับชั้นได้ทุกระดับและดูสาขาได้อย่างง่ายดาย มีฟิลด์ตรรกะทางธุรกิจหนึ่งฟิลด์ที่จำเป็นต้องส่งคืนเป็นฟังก์ชันของลำดับชั้น ฟิลด์ในแต่ละบัญชีบันทึกอธิบายขนาดของธุรกิจ (เราจะเรียกว่า CustomerCount) ตรรกะที่ฉันต้องการในการรายงานความต้องการในการสะสม CustomerCount จากสาขาทั้งหมด กล่าวอีกนัยหนึ่งเมื่อได้รับบัญชีฉันต้องสรุปยอดเงินของลูกค้าสำหรับบัญชีนั้นพร้อมกับเด็กทุกคนในทุกสาขาด้านล่างบัญชีตามลำดับชั้น ฉันคำนวณฟิลด์สำเร็จโดยใช้ฟิลด์ลำดับชั้นที่สร้างขึ้นภายใน CTE ซึ่งดูเหมือน acct4.acct3.acct2.acct1 ปัญหาที่ฉันพบคือทำให้มันทำงานได้เร็ว หากไม่มีฟิลด์คำนวณนี้แบบสอบถามจะทำงานใน ~ 3 วินาที เมื่อฉันเพิ่มในเขตข้อมูลจากการคำนวณมันจะกลายเป็นแบบสอบถาม 4 นาที นี่คือรุ่นที่ดีที่สุดที่ฉันสามารถพบได้เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง ฉันกำลังมองหาแนวคิดในการปรับโครงสร้างมุมมองนี้โดยไม่ต้องเสียสละอย่างมากต่อการแสดง ฉันเข้าใจเหตุผลที่สิ่งนี้ช้าลง (ต้องคำนวณภาคแสดงในส่วนคำสั่งที่ไหน) แต่ฉันไม่สามารถคิดวิธีอื่นในการจัดโครงสร้างและยังได้ผลลัพธ์เดียวกัน นี่คือตัวอย่างรหัสบางส่วนเพื่อสร้างตารางและทำ CTE ให้ตรงตามที่ใช้ในสภาพแวดล้อมของฉัน Use Tempdb go CREATE TABLE dbo.Account ( Acctid varchar(1) …

2
วิธีเพิ่มประสิทธิภาพการสืบค้น T-SQL โดยใช้ Execution Plan
ฉันมีแบบสอบถาม SQL ที่ฉันใช้เวลาสองวันที่ผ่านมาพยายามเพิ่มประสิทธิภาพโดยใช้การทดลองและข้อผิดพลาดและแผนการดำเนินการ แต่ไม่มีประโยชน์ โปรดยกโทษให้ฉันที่ทำเช่นนี้ แต่ฉันจะโพสต์แผนการดำเนินการทั้งหมดที่นี่ ฉันได้ใช้ความพยายามในการสร้างชื่อตารางและคอลัมน์ในแบบสอบถามและแผนปฏิบัติการทั่วไปทั้งเพื่อความกระชับและเพื่อปกป้อง IP ของ บริษัท ของฉัน แผนปฏิบัติการสามารถเปิดได้กับSQL ยามแผน Explorer ที่ ฉันทำ T-SQL ในปริมาณที่พอใช้ แต่การใช้แผนการดำเนินการเพื่อเพิ่มประสิทธิภาพการสืบค้นของฉันเป็นพื้นที่ใหม่สำหรับฉันและฉันได้พยายามเข้าใจวิธีการทำ ดังนั้นหากใครสามารถช่วยฉันด้วยและอธิบายว่าแผนปฏิบัติการนี้สามารถถอดรหัสเพื่อค้นหาวิธีในการค้นหาเพื่อเพิ่มประสิทธิภาพได้ฉันจะขอบคุณตลอดไป ฉันมีคำถามเพิ่มเติมเพื่อเพิ่มประสิทธิภาพ - ฉันต้องการกระดานกระโดดน้ำเพื่อช่วยฉันในเรื่องนี้เป็นครั้งแรก นี่คือแบบสอบถาม: DECLARE @Param0 DATETIME = '2013-07-29'; DECLARE @Param1 INT = CONVERT(INT, CONVERT(VARCHAR, @Param0, 112)) DECLARE @Param2 VARCHAR(50) = 'ABC'; DECLARE @Param3 VARCHAR(100) = 'DEF'; DECLARE @Param4 VARCHAR(50) …

2
ผู้ขายต้องการเรียกใช้งาน MSDB ทุก ๆ 5 นาทีสำหรับแอปพลิเคชันธุรกิจ
เรามีผู้จำหน่ายบุคคลที่สามที่พยายามรวม 2 แอพพลิเคชั่นที่ต่างกันซึ่งทั้งคู่อยู่ในอินสแตนซ์ของ SQL Server ของเราด้วย 150+ ฐานข้อมูลอื่น ๆ และพวกเขาต้องการสร้างงาน MSDB เพื่อ "ซิงค์" แอพพลิเคชั่น ต้องการเรียกใช้ทุกนาที) ลางสังหรณ์เริ่มต้นของฉันคือพวกเขาควรทำสิ่งนี้แทนในระดับแอปพลิเคชันด้วยงานที่กำหนดเวลาไว้กับ Windows หรืออาจเป็นทริกเกอร์ที่หวั่นเกรง (ซึ่งเรามักจะหันไปใช้ในสถานการณ์เช่นนี้) ฉันต้องการให้งาน MSDB สงวนไว้สำหรับงาน DBA ให้มากที่สุดเพื่อลดความยุ่งเหยิงที่นั่นและยังมีการสืบค้น MSDB ที่ช้าเมื่อดูประวัติงานด้วยงานแอคทีฟสุด ๆ เช่นนี้ (ซึ่งยังจมอยู่และเลื่อนประวัติงานสำคัญของ สิ่งที่สำคัญกว่าเช่นประวัติการสำรองข้อมูล) แต่แล้วอีกครั้งบางทีการตั้งค่าของฉันผิดและฉันต้องทำให้บางพื้นที่สำหรับ Application Tier ใน MSDB และพับแขนเสื้อของฉันและแก้ไขปัญหาประวัติงานสละเวลาตลอดไปในการโหลดเมื่อฉันต้องการเก็บรายการประวัติเพิ่มเติมเพื่อจับภาพ สิ่งสำคัญเช่นการสำรองข้อมูล (หรือล้างรายการงานที่ใช้งานมากเกินไป) ปัญหาอื่นที่ฉันมีคือตอนนี้ฉันต้องให้สิทธิ์ผู้ดูแลระบบ "sysadmin" นี้แทนสิทธิ์ "dbo" เฉพาะบน DBs ของพวกเขาเท่านั้นเมื่อพวกเขาทำการอัปเกรดผ่าน GUI และหวังว่าพวกเขาจะไม่ระเบิดอินสแตนซ์ที่ภารกิจสำคัญของฉัน ฐานข้อมูลคือ (หนึ่งในข้อเสียของการรวม) ฉันเดาว่าฉันสามารถใส่พวกเขาในอินสแตนซ์ …

6
SQL Server 2012 ช้ากว่า 2008
ฉันย้ายเว็บไซต์ขนาดใหญ่และฐานข้อมูลจากเซิร์ฟเวอร์เก่า (Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHz Quad Core / ดิสก์ SAS) ไปยังเซิร์ฟเวอร์รุ่นใหม่ที่ดีกว่ามาก (Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16 คอร์โปรเซสเซอร์ / ดิสก์ SSD) ฉันแยกไฟล์ฐานข้อมูลบนเซิร์ฟเวอร์เก่าคัดลอกและแนบไฟล์บนเซิร์ฟเวอร์ใหม่ ทุกอย่างเป็นไปด้วยดี หลังจากนั้นฉันเปลี่ยนเป็นระดับความเข้ากันได้เป็น 110 สถิติที่อัปเดตสร้างดัชนีใหม่ สำหรับความผิดหวังครั้งใหญ่ของฉันฉันสังเกตว่าการสืบค้น sql ส่วนใหญ่นั้นช้ากว่ามาก …

3
มีการแชร์อะไรระหว่างสองอินสแตนซ์บนเซิร์ฟเวอร์เดียวกัน
เราต้องการติดตั้ง SQL Server หลายอินสแตนซ์บนเซิร์ฟเวอร์ Windows เครื่องเดียว เราไม่สามารถใช้ VM ได้เพราะเซิร์ฟเวอร์นั้นเป็นโลหะเปลือย Windows 2008 R2 เพื่อจุดประสงค์ด้านความปลอดภัยเราจำเป็นต้องตรวจสอบให้แน่ใจว่าทั้งสองอินสแตนซ์ไม่มีส่วนเกี่ยวข้องใด ๆ รวมถึงการจัดการบริการ Windows บัญชีและอื่น ๆ ดังนั้นฉันเดาว่าคำถามคือ: เมื่อติดตั้ง "อินสแตนซ์" ของ SQL Server มากกว่าหนึ่งตัวบนเซิร์ฟเวอร์ Windows จะมีการแชร์อะไรบ้าง

3
เหตุใดจึงมีแผนปฏิบัติการแตกต่างกันระหว่าง OFFSET … FETCH และแบบ ROW_NUMBER แบบเก่า
OFFSET ... FETCHรุ่นใหม่แนะนำด้วย SQL Server 2012 เสนอการเพจที่ง่ายและเร็วขึ้น ทำไมจึงมีความแตกต่างใด ๆ เมื่อพิจารณาว่าทั้งสองรูปแบบมีความหมายเหมือนกันและเป็นเรื่องธรรมดามาก? ใครจะสันนิษฐานว่าเครื่องมือเพิ่มประสิทธิภาพรับรู้ทั้งสองและเพิ่มประสิทธิภาพพวกเขา (เล็กน้อย) อย่างเต็มที่ นี่เป็นกรณีที่ง่ายมากซึ่งOFFSET ... FETCHเร็วกว่าประมาณ 2 เท่าตามประมาณการต้นทุน SELECT * INTO #objects FROM sys.objects SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY object_id) r FROM #objects ) x WHERE r >= 30 AND r < (30 + 10) …

3
ส่งคืนคอลัมน์ต่อวันในช่วง
สมมติว่าฉันมีตาราง A: BookingsPerPerson Person_Id ArrivalDate DepartureDate 123456 2012-01-01 2012-01-04 213415 2012-01-02 2012-01-07 สิ่งที่ฉันต้องทำให้สำเร็จด้วยมุมมองคือ: Person_Id ArrivalDate DepartureDate Jan-01 Jan-02 Jan-03 Jan-04 Jan-05 Jan-06 Jan-07 123456 2012-01-01 2012-01-04 1 1 1 1 213415 2012-01-02 2012-01-07 1 1 1 1 1 1 ระบบนี้ใช้สำหรับกิจกรรมดังนั้นการจองโรงแรมแต่ละครั้งอาจใช้เวลาระหว่าง 1 ถึง 15 วัน แต่ไม่มากไปกว่านั้น ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก

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