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

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

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 …

2
ดัชนีแนวทางปฏิบัติที่ดีที่สุดที่ไม่ได้ใช้
จากแบบสอบถามนี้ถ้าฉันเห็นจำนวนการอ่านน้อย (ใกล้เคียงกับ 0 หรือ 0, เช่น 1 หรือ 2) และการอัปเดตผู้ใช้จำนวนมากหรือปานกลาง (ฉันไม่สามารถค้นหาแทรกหรือลบด้วยแบบสอบถามนี้) จำนวนแถวขนาดใหญ่ฉันควรลบดัชนีในทฤษฎี SELECT DISTINCT OBJECT_NAME(s.[object_id]) AS ObjectName , p.rows TableRows , i.name AS [INDEX NAME] , (user_seeks + user_scans + user_lookups) AS TotalReads , user_updates UserUpdates FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] AND i.index_id = …

6
ประโยชน์ที่เป็นไปได้ของการจัดเก็บค่าหลายค่าในหนึ่งฟิลด์ของหนึ่งแถวแทนที่จะแยกเป็นแถว
ในระหว่างการประชุมรายสัปดาห์ครั้งล่าสุดของเราบุคคลที่ไม่มีประสบการณ์ด้านการบริหารฐานข้อมูลได้นำคำถามนี้มาใช้: "จะมีสถานการณ์สมมติที่จัดเก็บข้อมูลในบรรทัด (สตริง) แทนที่จะแสดงหลายบรรทัดหรือไม่" ให้เราสมมติตารางcountryStatesที่เราต้องการจัดเก็บสถานะของประเทศ ฉันจะใช้ USA เป็นตัวอย่างนี้และจะไม่แสดงรายการรัฐทั้งหมดเพื่อความเกียจคร้าน ที่นั่นเราจะมีสองคอลัมน์ หนึ่งเรียกว่าCountryและอื่น ๆ Statesที่เรียกว่า ตามที่กล่าวไว้ที่นี่และที่เสนอโดยของ @ srutzky คำตอบที่PKจะได้รับรหัสที่กำหนดโดยมาตรฐาน ISO 3166-1 alpha-3 ตารางของเราจะเป็นดังนี้: +---------+-----------------------+-------------------------------------------------------+ | Country | States | StateName | +---------+-----------------------+-------------------------------------------------------+ | USA | AL, CA, FL,OH, NY, WY | Alabama, California, Florida, Ohio, New York, Wyoming | +---------+-----------------------+-------------------------------------------------------+ เมื่อถามคำถามเดียวกันนี้ให้กับนักพัฒนาเพื่อนเขากล่าวว่าจากมุมมองขนาดทราฟฟิกข้อมูลนี่อาจมีประโยชน์ แต่ไม่ใช่ถ้าเราจำเป็นต้องจัดการข้อมูลนี้ ในกรณีนี้จะต้องมีความฉลาดในรหัสแอปพลิเคชันซึ่งสามารถแปลงสตริงนี้ในรายการ …

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 …

2
ปรับการค้นหาให้เหมาะสมสำหรับ 25+ ล้านแถว
ฉันใช้ MS SQL และฉันต้องเรียกใช้แบบสอบถามหลายรายการในตารางเดียวกันในเกณฑ์ที่แตกต่างกัน ตอนแรกฉันเรียกใช้แบบสอบถามแต่ละรายการในตารางเดิมแม้ว่าพวกเขาทั้งหมดแชร์การกรองบางอย่าง (เช่นวันที่สถานะ) การดำเนินการนี้ใช้เวลานาน (ประมาณ 2 นาที) มีข้อมูลที่ซ้ำกันในแถวข้อมูลและดัชนีทั้งหมดไม่ได้เป็นคลัสเตอร์ ฉันสนใจเฉพาะคอลัมน์ 4 คอลัมน์สำหรับเกณฑ์ของฉันและผลลัพธ์ควรให้ผลลัพธ์การนับเท่านั้นสำหรับการค้นหาทั้งหมด คอลัมน์ที่ต้องการ: TABLE, FIELD, AFTER, DATEและมีดัชนีในแต่ละและDATETABLE หลังจากสร้างตารางชั่วคราวที่มีเฉพาะฟิลด์ที่ฉันต้องการมันลงไปเป็นเวลา 1:40 นาทีซึ่งยังแย่มาก CREATE TABLE #TEMP ( TABLE VARCHAR(30) NULL, FIELD VARCHAR(30) NULL, AFTER VARCHAR(1000) NULL, DATE DATETIME, SORT_ID INT IDENTITY(1,1) ) CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID) INSERT INTO #TEMP …

3
ฉันจะให้ SSMS ใช้เส้นทางสัมพัทธ์ของสคริปต์ปัจจุบันด้วย: r ในโหมด sqlcmd เหมือนกับ SSDT ได้อย่างไร
ถ้าผมมี foo.sql และ bar.sql ในโฟลเดอร์เดียวกัน foo.sql สามารถอ้างอิง bar.sql เมื่อเรียกใช้จาก SSDT ในโหมด sqlcmd :r ".\bar.sql"กับ อย่างไรก็ตาม SSMS จะไม่พบ Procmon แสดงให้เห็นว่า SSMS กำลังมองหาใน%systemroot%\syswow64: ฉันจะบอก SSMS ให้ดูในโฟลเดอร์ที่บันทึกสคริปต์ปัจจุบันไว้โดยไม่ต้องแจ้งเส้นทางอย่างชัดเจนได้อย่างไร
11 sql-server  ssms  sqlcmd  ssdt 

4
คอลัมน์ NVARCHAR เป็นคีย์หลักหรือคอลัมน์ที่ไม่ซ้ำกัน
ฉันกำลังพัฒนาฐานข้อมูล SQL Server 2012 และฉันมีข้อสงสัยเกี่ยวกับคอลัมน์ nvarchar เป็นคีย์หลัก ฉันมีตารางนี้: CREATE TABLE [dbo].[CODES] ( [ID_CODE] [bigint] IDENTITY(1,1) NOT NULL, [CODE_LEVEL] [tinyint] NOT NULL, [CODE] [nvarchar](20) NOT NULL, [FLAG] [tinyint] NOT NULL, [IS_TRANSMITTED] [bit] NOT NULL DEFAULT 0, CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED ( [CODE_LEVEL] ASC, [CODE] ASC ) ) แต่ตอนนี้ฉันต้องการใช้[CODE]คอลัมน์เป็นคีย์หลักและลบ[ID_CODE]คอลัมน์ มีปัญหาหรือบทลงโทษหรือไม่หากฉันมีNVARCHARคอลัมน์เป็นPRIMARY KEY? …

1
จะอนุญาตให้ใช้งานโพรซีเดอร์ที่เก็บไว้ แต่ไม่ได้เขียนได้อย่างไร
ฉันต้องการตั้งค่าผู้ใช้ "อ่าน" บนอินสแตนซ์ SQL Server 2012 ของฉัน ฉันต้องการอนุญาตให้เขามีสิทธิ์ดำเนินการกระบวนงานที่เก็บไว้หรือฟังก์ชันหรือคำสั่ง SQL โดยตรงซึ่งดึงข้อมูลจากตารางและมุมมองทั้งหมด แต่ไม่อัปเดตหรือแทรก (เช่นอ่านอะไรและเขียนอะไร) ฉันสามารถตั้งค่านี้ได้โดยไม่ให้สิทธิ์เฉพาะกับแต่ละฟังก์ชั่นหรือขั้นตอนการจัดเก็บตามชื่อ แต่ให้สิทธิ์การดำเนินการที่ถูกต้องกับฟังก์ชั่นใด ๆ หรือขั้นตอนการจัดเก็บ จะมีอะไรเปลี่ยนแปลงไหมถ้าฉันใช้ SQL Server 2008 แทน ชี้แจงและเพิ่มเติม: หากขั้นตอนการจัดเก็บเปลี่ยนแปลงข้อมูลผู้ใช้ควรได้รับข้อความแสดงข้อผิดพลาด (ปฏิเสธการแก้ไขหรือปฏิเสธการเข้าถึงขั้นตอนการจัดเก็บทั้งหมด) หากวิธีแก้ไขที่เป็นไปได้เกี่ยวข้องกับการปฏิเสธสิทธิ์ฉันจะไม่ให้สิทธิ์บางอย่างแทนการปฏิเสธได้หรือไม่ สามารถใช้การปฏิเสธกับตารางทั้งหมดมุมมอง ฯลฯ (มีอยู่ทั้งในปัจจุบันและในอนาคต) ในฐานข้อมูลในคำสั่งเดียวได้หรือไม่

5
ถ่ายโอนข้อมูลจำนวนมาก (84 ล้านแถว) ของข้อมูลอย่างมีประสิทธิภาพ
ฉันมีแถวประมาณ 84 ล้านแถว พวกเขาทั้งหมดจะต้องถูกถ่ายโอนไปยังฐานข้อมูลแยกต่างหากบนเซิร์ฟเวอร์เดียวกันจากนั้นฉันลบเพื่อลบประมาณ 60 ล้านแถวจากฐานข้อมูลต้นทาง 84 ล้านแถวทั้งหมดอยู่ในตารางเดียวกัน ตารางนั้นคิดเป็น 90% ของฐานข้อมูลทั้งหมด ดังนั้น ... ที่มา: 84 ล้านแถว -> 24 ล้านแถวปลายทาง: 0 แถว -> 84 ล้านแถว แหล่งที่มาใช้โหมดการกู้คืนแบบเต็มปลายทางจะใช้งานง่าย ฉันสงสัยว่าอะไรจะเป็นวิธีที่มีประสิทธิภาพที่สุดในการทำสิ่งนี้? แผนก: 1) INSERT INTO destination SELECT * จากแหล่งที่มา 2) แหล่งที่มาตัด 3) INSERT INTO SELECT เลือก * จากปลายทาง WHERE keep_condition = 1 แผนข: 1) คืนค่าสำเนาสำรองของฐานข้อมูลต้นทางเป็นฐานข้อมูลปลายทาง …
11 sql-server 

2
โปรแกรมปรับปรุงสะสม MS SQL Server - แนวทางปฏิบัติที่ดีที่สุด
ฉันพยายามที่จะได้รับความคิดของสิ่งที่ควรปฏิบัติที่ดีสำหรับการที่อัพเดทสะสม SQL Server ขณะนี้เราทำงานบนแนวคิดของ "ไม่ทำอะไรเลยเว้นแต่ปัญหาที่แก้ไขโดย CU คือสิ่งที่เราประสบ" นั่นเป็นผลมาจากวิธี "ถ้ามันยังไม่พังอย่าแก้ไขมัน" แต่ฉันสงสัยว่านั่นเป็นความคิดที่ดีจริง ๆ เพราะ CU หลายแห่งมีการปรับปรุงประสิทธิภาพ เรากำลังมองหาการเพิ่ม CU ไปยังแพทช์ที่ใช้ในระหว่างรอบการบำรุงรักษาเป็นระยะเวลาหนึ่งหรือสองเดือนหลังจากการเปิดตัว CU คนอื่นทำอะไรและทำไม ขณะที่การปรับปรุงไปยังคำถามที่ส่งผลกระทบต่อคำตอบด้านล่างวันที่ 24 มีนาคม 2016 ทีมงานของ Microsoft SQL Server ประกาศว่าพวกเขาได้รับการปรับปรุงรูปแบบการให้บริการของพวกเขา Microsoft ขอแนะนำให้ผู้ใช้ทุกคนติดตั้ง CU ทั้งหมดที่เผยแพร่หลังจากเดือนมกราคม 2559: ตั้งแต่วันที่ CU ของเดือนมกราคมข้อความเตือนเหล่านี้ได้รับการปรับปรุงตอนนี้เราขอแนะนำให้ติดตั้ง CU ของเชิงรุกอย่างต่อเนื่องเมื่อพวกเขาพร้อมใช้งาน คุณควรวางแผนที่จะติดตั้ง CU ด้วยความมั่นใจในระดับเดียวกับที่คุณวางแผนที่จะติดตั้ง SPs (Service Packs) ตามที่ได้เปิดตัว เนื่องจาก CU ได้รับการรับรองและทดสอบตามระดับของ SP นอกจากนี้ข้อมูล …
11 sql-server 

1
IDENTITY_INSERT มีผลต่อการทำงานพร้อมกันอย่างไร
ฉันกำลังพยายามช่วยเหลือลูกค้าด้วยโปรแกรมเสริม SAP ของ บริษัท อื่นที่มีปัญหาการโพสต์และไม่ได้รับการสนับสนุน ภายใต้สถานการณ์บางอย่างมันจะเก็บถาวรและโพสต์ที่ไม่สมบูรณ์จากตารางคิวการโพสต์ไปยังตารางเก็บถาวรการโพสต์ ฉันต้องการย้ายผลลัพธ์ที่เก็บถาวรเหล่านี้กลับไปที่คิว ID ของคิวคือคอลัมน์ข้อมูลประจำตัวและฉันต้องการเก็บไว้เหมือนเดิม คำถามคือถ้าฉันทำ identity_insert on / insert / identity_insert off ฉันจะคาดหวังอะไรเกี่ยวกับการเกิดพร้อมกันกับกระบวนการที่สร้างรายการคิวและคาดว่าคอลัมน์ identity จะถูกสร้างขึ้นโดยอัตโนมัติ? พอยน์เตอร์ใด ๆ ในวิธีที่ดีที่สุดในการแสดงพฤติกรรมดังกล่าวจะได้รับการชื่นชมอย่างมากเช่นกัน

3
การมิร์เรอร์ฐานข้อมูลเซิร์ฟเวอร์ SQL กำลังจะตาย ฉันจะรับประกันความพร้อมใช้งานสูงในขณะนี้ได้อย่างไร
มิเรอร์ฐานข้อมูลคุณลักษณะของ SQL Server จะตาย: คุณลักษณะนี้จะถูกลบใน Microsoft SQL Server รุ่นอนาคต หลีกเลี่ยงการใช้คุณสมบัตินี้ในงานพัฒนาใหม่และวางแผนแก้ไขแอปพลิเคชั่นที่ใช้คุณสมบัตินี้ในปัจจุบัน ใช้กลุ่มความพร้อมใช้งานAlwaysOnแทน ไม่มีใครรู้ว่าเมื่อไหร่? ตัวเลือกของฉันสำหรับฐานข้อมูลความพร้อมใช้งานสูง (และการกู้คืนอย่างรวดเร็ว) คืออะไร

1
การซิงโครไนซ์โดยใช้ทริกเกอร์
ฉันมีข้อกำหนดคล้ายกับการสนทนาก่อนหน้านี้ที่: การเขียนโครงสร้างธนาคารอย่างง่าย: ฉันจะรักษายอดคงเหลือของฉันให้สอดคล้องกับประวัติการทำธุรกรรมได้อย่างไร ทริกเกอร์ร่วมกับการทำธุรกรรม ฉันมีสองตาราง[Account].[Balance]และ[Transaction].[Amount]: CREATE TABLE Account ( AccountID INT , Balance MONEY ); CREATE TABLE Transaction ( TransactionID INT , AccountID INT , Amount MONEY ); เมื่อมีการแทรก update หรือลบกับ[Transaction]ตารางที่ควรได้รับการปรับปรุงขึ้นอยู่กับ[Account].[Balance][Amount] ขณะนี้ฉันมีทริกเกอร์ให้ทำงานนี้: ALTER TRIGGER [dbo].[TransactionChanged] ON [dbo].[Transaction] AFTER INSERT, UPDATE, DELETE AS BEGIN IF EXISTS (select 1 from [Deleted]) OR …

3
เขตข้อมูลจากการคำนวณ SQL ในทั้ง SELECT และ GROUP BY clause
บ่อยครั้งในการสืบค้นฐานข้อมูล MS SQL Server ของฉันฉันต้องสร้างเขตข้อมูลจากการคำนวณเช่นนี้ (CASE WHEN A.type = 'Workover' THEN 'Workover' ELSE (CASE WHEN substring(C.category, 2, 1) = 'D' THEN 'Drilling' WHEN substring(C.category, 2, 1) = 'C' THEN 'Completion' WHEN substring(C.category, 2, 1) = 'W' THEN 'Workover' ELSE 'Other' END) END) จากนั้นฉันต้องจัดกลุ่มผลลัพธ์ของฉันตามฟิลด์ที่คำนวณนี้ (อื่น ๆ ) ดังนั้นฉันมีการคำนวณที่เหมือนกันทั้งใน SELECT และ GROUP …
11 sql-server 

4
การใช้งาน CPU สูงบนเซิร์ฟเวอร์ SQL - คิวรีช้า [ปิด]
คำถามนี้ไม่น่าจะช่วยผู้เข้าชมในอนาคต มันเกี่ยวข้องเฉพาะกับพื้นที่ทางภูมิศาสตร์ขนาดเล็กช่วงเวลาที่เฉพาะเจาะจงหรือสถานการณ์ที่แคบเป็นพิเศษซึ่งโดยทั่วไปไม่สามารถใช้ได้กับผู้ชมทั่วโลกของอินเทอร์เน็ต สำหรับความช่วยเหลือในการทำคำถามนี้มากขึ้นบังคับในวงกว้างไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน6 ปีที่ผ่านมา MS SQL Server ของเราใช้ซีพียูประมาณ 95% หลังจากรีสตาร์ทเซิร์ฟเวอร์ (ฮาร์ดแวร์) หรือรีสตาร์ท SQL-Service การใช้งานจะเป็น 0% และจะเพิ่มขึ้นอย่างช้า ๆ ในระยะเวลา 1-3 วัน ขึ้นอยู่กับว่ามีการใช้งานเท่าใด เมื่อเกิน 80% ทุกคำถามจะช้ามาก เว็บไซต์ของเราจัดการกับข้อความค้นหาจำนวนมากดังนั้นบางรายการใช้เวลา 45-60 วินาที หลังจากรีสตาร์ท (การใช้งาน CPU น้อยกว่า 80%) จะใช้เวลา 11-20 วินาทีในการค้นหาเดียวกัน ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันได้อ่านออนไลน์แล้วที่ affinity masks สามารถปรับการใช้งาน CPU แต่การตั้งค่า Affinity ถูกปิดใช้งาน ฉันไม่สามารถเปลี่ยนได้ เป็นเพราะฉันมีเพียง 1 โปรเซสเซอร์หรือไม่ มีเคล็ดลับมากมายเกี่ยวกับข้อความค้นหาด้วยตนเอง …

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