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

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

2
คอลัมน์ที่ไม่เกี่ยวข้องมีผลต่อเวลาสอบถามของข้อความสั่งที่เลือกหรือไม่
ฉันแค่อยากรู้ สมมติว่าคุณมีตาราง 1 ล้านระเบียน / แถว select order_value from store.orders มันสร้างความแตกต่างหรือไม่ว่าตารางนั้นมี 1 เขตข้อมูล 2 เขตข้อมูลหรือ 100 เขตข้อมูลในเวลาสอบถามจริงหรือไม่ ฉันหมายถึงฟิลด์ทั้งหมดที่ไม่ใช่ "order_value" ตอนนี้ฉันกำลังผลักข้อมูลไปยังคลังข้อมูล บางครั้งฉันทิ้งเขตข้อมูลลงในตารางที่ "อาจใช้ในอนาคตสักวันหนึ่ง" - แต่พวกเขาไม่ได้ถูกสอบถามตอนนี้โดยอะไร ฟิลด์ 'ภายนอก' เหล่านี้จะมีผลต่อคำสั่งที่เลือกซึ่งไม่รวมไว้ทั้งโดยตรงหรือโดยอ้อม (ไม่ใช่ * ฉันหมายถึง)

4
SQL Server Query Store - การสืบค้นคำว่า 'เฉพาะกิจ' คืออะไร
ฉันดำน้ำลึกลงไปใน SQL Server Query Store และฉันมักจะเห็นการอ้างอิงถึงคำสั่ง 'เฉพาะกิจ' อย่างไรก็ตามฉันไม่เห็นสิ่งที่ Query Store กำหนดคิวรีแบบเฉพาะกิจ ฉันเคยเห็นสถานที่ที่สามารถอนุมานได้ว่าเป็นแบบสอบถามโดยไม่มีพารามิเตอร์หรือแบบสอบถามดำเนินการเพียงครั้งเดียว คำจำกัดความที่เป็นทางการมีอยู่สำหรับสิ่งนี้หรือไม่? โดยทั่วไปฉันไม่ได้ตั้งใจ ฉันหมายถึงมันเกี่ยวข้องกับ Query Store ตัวอย่างเช่นหน้านี้แสดงตัวอย่างของการลบแบบสอบถาม ad-hoc ออกจากที่เก็บแบบสอบถาม แต่ปรากฏว่าเกณฑ์ที่ใช้คือการนับการดำเนินการเพียงครั้งเดียว นี่ดูเหมือนจะเป็นคำจำกัดความที่แปลกประหลาดของคำค้นหาเฉพาะกิจ BTW หากคุณไปที่หน้าให้ค้นหา 'ลบคำค้นหาแบบเฉพาะกิจ'

1
ระบุสาเหตุที่แท้จริงสำหรับสาเหตุที่ฐานข้อมูลติดค้างอยู่ในสถานะเรียกคืน
ฉันรู้ว่ามีคำถามที่แก้ปัญหาของฐานข้อมูลที่ติดอยู่ในRESTORINGสถานะและได้ใช้โซลูชั่นเหล่านั้นเพื่อนำฐานข้อมูลด้วยตนเองกลับมาออนไลน์ แต่สถานการณ์ของฉันแตกต่างกันบ้าง ฉันมีการกู้คืนอัตโนมัติโดยใช้สคริปต์ Powershell ซึ่งคืนค่าสำเนาการผลิตไปยังอินสแตนซ์ DEV สคริปต์ไม่เปลี่ยนแปลงประมาณปีและบางครั้งกระบวนการกู้คืนจะเสร็จสิ้น แต่ฐานข้อมูลที่กู้คืนติดอยู่ในRESTORINGสถานะ (บางครั้งสคริปต์ทำงานได้ดีบางครั้งก็ล้มเหลวเช่นนี้) แต่ละครั้งถ้าฉันรันกระบวนการที่ทำงานด้วยตนเองอีกครั้งหรือถ้าฉันกู้คืนฐานข้อมูลด้วยตนเองจากส่วนติดต่อผู้ใช้ของ SSMS หรือผ่าน T-SQL จะเสร็จสมบูรณ์โดยไม่มีปัญหา ฉันพบคำตอบที่แนะนำให้เรียกใช้CHECKDBบนฐานข้อมูลที่คืนค่า แต่ไม่มีอะไรออกมาเป็นสาเหตุของปัญหานี้ เนื่องจากสคริปต์คืนค่าคืนค่าการสำรองข้อมูลทั้งหมดของฐานข้อมูลและใช้"WITH RECOVERY"ตัวเลือกฉันพยายามค้นหาสิ่งที่อาจหยุดกระบวนการกู้คืนแม้ว่าฉันจะกู้คืนโดยใช้"WITH RECOVERY"จริง ข้อเสนอแนะใด ๆ ที่ชื่นชมจริง ๆ ตั้งแต่ฉันติดอยู่ที่พยายามที่จะเข้าใจว่าทำไมสิ่งนี้เกิดขึ้นเป็นครั้งคราว ฉันอยากจะแก้ปัญหาต้นเหตุของปัญหามากกว่าจะรักษาอาการซึ่งก็คือการกู้คืนฐานข้อมูลด้วยตนเองอีกครั้ง ปรับปรุง: Github สรุปสาระสำคัญได้ @Brent แนะนำ - ที่นี่

1
ปัญหาการเข้ารหัสกับคอลัมน์ SQL Server VARCHAR ที่ดึงมาใน Python
เมื่อเร็ว ๆ นี้เรามีปัญหาเกี่ยวกับการเข้ารหัสที่เกี่ยวข้องกับเขตข้อมูลที่ถูกเก็บเป็น varchar (120) ใน SQL Server ใน SSMS, varchar จะปรากฏเป็น: "ใครฆ่า JonBen‚t" อย่างไรก็ตามเมื่อมันถูกนำเข้าสู่ไพ ธ อนมันจะปรากฏเป็น: ฉันค้นคว้าจากด้าน Python แล้วไม่มีอะไรแปลก ๆ เกิดขึ้น ทฤษฎีของฉันคือ varchar ใน SQL Server ยอมรับอักขระ UTF-8 ซึ่งแสดงใน python แตกต่างจาก SSMS ฉันไม่คุ้นเคยกับการเข้ารหัสใน SQL Server มาก ใครช่วยได้โปรดแจ้งให้เราทราบต่อไปนี้: มีวิธีใน SSMS เพื่อดูการเข้ารหัสของ varchar หรือไม่? ตัวอย่างเช่นดู \ x82 แทนที่จะแสดงเครื่องหมายจุลภาคเนื่องจากมาจาก SSMS หรือไม่ เรากำลังใช้ …

1
ทำไมคำใบ้ READPAST ทำให้มุมมองที่จัดทำดัชนีถูกละเว้น?
ฉันกำลังตรวจสอบโดยใช้READPASTคำแนะนำเพื่อลดการล็อกทรัพยากรในระบบย่อยทางการเงินของแอปพลิเคชันของเรา ดูเหมือนจะเป็นวิธีที่ดีในการไปเพราะบันทึกการทำธุรกรรมทางการเงินนั้นเคยเพิ่มไม่เคยอัพเดทหรือลบ แถวเดียวที่จะถูกข้ามไปคือแถวใหม่ที่แทรกอยู่ภายในธุรกรรม พวกเขาไม่มีอยู่จริงกับโลกภายนอกจนกว่าจะมีการทำธุรกรรม อย่างไรก็ตามฉันสังเกตเห็นประสิทธิภาพการทำงานแย่ลงสำหรับการค้นหาที่ใช้มุมมองที่จัดทำดัชนีซึ่งฉันได้ใส่READPASTคำใบ้ไว้ เปรียบเทียบแผนแบบสอบถามมันดูเหมือนกับคำใบ้เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามเลือกที่จะไม่ใช้มุมมองที่จัดทำดัชนีและแทนที่จะกลับไปที่การรักษามันเหมือนมุมมองปกติ ฉันไม่แน่ใจว่าทำไมถึงเป็นเช่นนั้น ฉันคิดว่ามุมมองที่จัดทำดัชนีจะเหมือนกับดัชนีอื่น ๆ ในคีย์นั้นสามารถล็อกระหว่างการดำเนินการและการเพิ่มREADPASTจะทำงานในทำนองเดียวกัน SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST) WHERE isa.TotalOwedAmount = 0.0 SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WHERE isa.TotalOwedAmount = 0.0 การเพิ่มNOEXPANDคำใบ้ดูเหมือนจะใช้งานได้ แต่ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับสาเหตุที่READPASTทำให้เครื่องมือเพิ่มประสิทธิภาพคิวรีสร้างตัวเลือกนั้นตั้งแต่แรก (เป็นส่วนหนึ่งของคำตอบแบบเต็ม)


1
เหตุใด SQL Server จึงไม่ทำสถิติฮิสโตแกรมคอลัมน์ผสม
SQL Server มีสิ่งที่เรียกว่า "สถิติหลายคอลัมน์" แต่ไม่ใช่สิ่งที่คิดว่าจะหมายถึง ลองดูตารางตัวอย่างต่อไปนี้: CREATE TABLE BadStatistics ( IsArchived BIT NOT NULL, Id INT NOT NULL IDENTITY PRIMARY KEY, Mystery VARCHAR(200) NOT NULL ); CREATE NONCLUSTERED INDEX BadIndex ON BadStatistics (IsArchived, Mystery); ด้วยเหตุนี้จึงมีการสร้างสถิติสองรายการในดัชนีสองรายการที่เรามี: สถิติสำหรับ BadIndex: +--------------+----------------+-------------------------+ | All density | Average Length | Columns | +--------------+----------------+-------------------------+ | 0.5 …

3
ค้นหาคำแนะนำเกี่ยวกับวิธีการรวมข้อมูลจากฐานข้อมูลลูกค้ากว่า 100+ เข้าสู่ฐานข้อมูลการรายงานจากส่วนกลาง
ฉันเป็นผู้พัฒนา SQL (ไม่ใช่ DBA หรือสถาปนิก) สำหรับ บริษัท SaaS (มีพนักงานประมาณ 50 คน) ฉันได้รับมอบหมายให้หาวิธี: ลดการรายงานการปฏิบัติงานจากฐานข้อมูล OLTP กว่า 100 รายการของเรา อนุญาตให้รายงานเหล่านั้นทำงานกับข้อมูลจากฐานข้อมูลลูกค้าหลาย ๆ วางตำแหน่ง บริษัท ของเราเพื่อมอบโซลูชันการวิเคราะห์ที่เพิ่มขึ้นในอนาคต ฉันได้อ่านบทความเกี่ยวกับเทคโนโลยีที่หลากหลายเช่นการจำลองแบบของทรานแซคชัน (โดยเฉพาะรุ่นสมาชิกแบบหนึ่งต่อหนึ่ง / กลาง) โบรกเกอร์บริการ SQL การจัดส่งบันทึกการติดตามการเปลี่ยนแปลง (CT) และการเก็บข้อมูลเปลี่ยน (CDC ความเข้าใจของฉันคือ นี่เป็นแบบองค์กรเท่านั้น) และฉันไม่แน่ใจว่าเส้นทางไหนดีที่สุดในการติดตาม ฉันหวังว่าพวกคุณบางคนที่มีความเชี่ยวชาญด้านการรวมระบบอาจพบการตั้งค่าที่คล้ายกับของเราและสามารถชี้เส้นทางที่ประสบความสำเร็จหรือชี้ทางให้ฉันไปยังแหล่งข้อมูลที่จะเป็นประโยชน์ เนื่องจากข้อ จำกัด ด้านราคาโซลูชันของเราต้องทำงานภายใน SQL Server Standard Edition นอกจากนี้วิธีแก้ปัญหาจะต้องสมเหตุสมผลในการสนับสนุน / ดูแลรักษาภายในองค์กรขนาดเล็กของเรา การกำหนดค่าพื้นฐาน: ขณะนี้เรามีฐานข้อมูลลูกค้ากว่า 100 รายส่วนใหญ่ติดตั้งบนเซิร์ฟเวอร์ …

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 …

3
format () เป็นฟังก์ชั่นสตริงในตัว nondeterministic …ใช่ไหม?
ก่อนที่ฉันจะโพสต์รายการเชื่อมต่อเกี่ยวกับการขาดเอกสารเกี่ยวกับเรื่องนี้จะมีคนยืนยันว่าฉันไม่ได้ทำอะไรบางอย่างที่นี่หายไปหรือไม่ บนหน้าเอกสารที่formatระบุว่าเป็นฟังก์ชันสตริง: "ฟังก์ชั่นสตริงในตัวทั้งหมดสามารถกำหนดค่าได้" - ฟังก์ชั่นสตริง (Transact-SQL) นอกจากนี้ยังไม่มีการกล่าวถึงformatการไม่เป็นสาธารณะในหน้าเว็บที่เกี่ยวข้อง: ฟังก์ชั่นที่กำหนดและไม่ได้กำหนดไว้ล่วงหน้า รูปแบบ (Transact-SQL) อย่างไรก็ตามเมื่อพยายามสร้างคอลัมน์ที่คำนวณแล้ว: create table t (date_col date); insert into t values (getdate()); alter table t add date_formatted_01 as format(date_col,'YYYY') persisted; ส่งคืนข้อผิดพลาดต่อไปนี้: คอลัมน์ที่คำนวณ 'date_formatted_01' ในตาราง 't' ไม่สามารถคงอยู่ได้เนื่องจากคอลัมน์ไม่ได้ถูกกำหนดไว้ ในเอกสารระบุว่า หากไม่ได้ระบุอาร์กิวเมนต์วัฒนธรรมจะใช้ภาษาของเซสชันปัจจุบัน แต่การเพิ่มอาร์กิวเมนต์วัฒนธรรมจะไม่เปลี่ยนแปลงสิ่งต่าง ๆ สิ่งนี้ก็ล้มเหลวเช่นกัน alter table t add date_formatted_02 as format(date_col, 'd', 'en-US' ) …
10 sql-server 

2
คำใบ้ Tablock ทำให้เกิดการหยุดชะงัก
ฉันใส่ชุดข้อมูลสองชุดโดยใช้การบันทึกขั้นต่ำลงในตาราง heap ที่ว่างโดยใช้ Execute SQL Tasks สองชุดที่ทำงานแบบขนานและ SQL ในรูปแบบต่อไปนี้ INSERT INTO Table (TABLOCK) SELECT FROM ... หลังจากงานหยุดทำงานหนึ่งในงาน SQL กลายเป็นเหยื่อการหยุดชะงัก ด้านล่างคือเอาต์พุต XML ของกราฟเดดล็อก ใครสามารถอธิบายสิ่งที่เกิดขึ้นภายใต้ประทุนได้หรือไม่? <resource-list> <objectlock lockPartition="0" objid="1586156746" subresource="FULL" dbid="7" objectname="dbo.TargetTable" id="lock7374a00" mode="IX" associatedObjectId="1586156746"> <owner-list> <owner id="process9609dc8" mode="Sch-S"/> <owner id="process9609dc8" mode="IX"/> </owner-list> <waiter-list> <waiter id="process5e13048" mode="X" requestType="convert"/> </waiter-list> </objectlock> <objectlock lockPartition="0" …

1
ปัญหาเกี่ยวกับแบบแผนการตั้งชื่อตารางและการจัดการนโยบายใน SQL Server 2016
ใน SQL Server 2012 ฉันมีชุดนโยบายที่ไม่อนุญาตให้มีช่องว่างในชื่อตาราง อย่างไรก็ตามเมื่อฉันใช้นโยบายเดียวกันใน SQL Server 2016 ฉันได้รับข้อผิดพลาด นี่คือรหัสสำหรับเงื่อนไข: DECLARE @condition_id INT EXEC msdb.dbo.sp_syspolicy_add_condition @name=N'No Spaces', @description=N'No spaces in table names.', @facet=N'IMultipartNameFacet', @expression=N'<Operator> <TypeClass>Bool</TypeClass> <OpType>NOT_LIKE</OpType> <Count>2</Count> <Attribute> <TypeClass>String</TypeClass> <Name>Name</Name> </Attribute> <Constant> <TypeClass>String</TypeClass> <ObjType>System.String</ObjType> <Value>% %</Value> </Constant> </Operator>', @is_name_condition=4, @obj_name=N'% %', @condition_id=@condition_id OUTPUT SELECT @condition_id นี่คือรหัสสำหรับนโยบาย: DECLARE @object_set_id INT …

2
ดูเหมือนว่าคิวรีลบขนาดใหญ่จะหยุดชะงัก
เราเรียกใช้คิวรีการลบในฐานข้อมูลที่มีแถว 1.8 พันล้าน การลบนี้จะลบแถว 1.2 พันล้าน ในการเข้าใจย้อนหลังเราจะแยกแบบสอบถามนี้เป็น 100m ต่อครั้ง แต่เราอยู่ในตำแหน่งที่มีการเรียกใช้งานเป็นเวลา 24 ชั่วโมงและไฟล์บันทึกอยู่ที่ 2Tb ซึ่งดูเหมือนจะเป็นขนาดสูงสุดที่อนุญาตสำหรับไฟล์บันทึก ฐานข้อมูลอยู่ในโหมดการกู้คืนแบบง่าย มีการบันทึกแบบสอบถามนี้หรือไม่? หรือเราต้องรีสตาร์ทเซิร์ฟเวอร์ SQL และดูว่าเกิดอะไรขึ้น ฐานข้อมูลจะใช้ไม่ได้หรือไม่ มีอะไรที่เราสามารถทำได้เพื่อกำจัดสิ่งนี้ให้หมดจดที่สุด

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ชุด …

1
แคช SQL Server คำนวณค่าในแบบสอบถามหรือไม่
ทุกครั้งที่ฉันเรียกใช้แบบสอบถามชนิดนี้ฉันมักจะสงสัยว่า SQL Server ทำงานอย่างไร ถ้าฉันเรียกใช้แบบสอบถามชนิดใดก็ได้ที่ต้องการการคำนวณแล้วใช้ค่านั้นในหลาย ๆ ที่ตัวอย่างเช่นในselectและorder bySQL Server จะคำนวณมันสองครั้งสำหรับทุกแถวหรือจะถูกแคชหรือไม่ นอกจากนี้วิธีการทำงานกับฟังก์ชั่นที่ผู้ใช้กำหนด? ตัวอย่าง: SELECT CompanyId, Count(*) FROM Sales ORDER BY Count(*) desc SELECT Geom.BufferWithTolerance(@radius, 0.01, 0).STEnvelope().STPointN(1).STX, Geom.BufferWithTolerance(@radius, 0.01, 0).STEnvelope().STPointN(1).STY FROM Table SELECT Id, udf.MyFunction(Id) FROM Table ORDER BY udf.MyFunction(Id) มีวิธีทำให้มีประสิทธิภาพมากขึ้นหรือ SQL Server ฉลาดพอที่จะจัดการให้ฉันได้หรือไม่?
10 sql-server 

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