ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

4
ทางเลือกชุดเครื่องมือ SSMS [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน5 ปีที่ผ่านมา มีเครื่องมือใดบ้างเทียบได้กับSSMS Tools Pack 2012หรือไม่ การออกใบอนุญาต ($ 30 ต่อเครื่อง, $ 100 สำหรับเครื่องจำนวนเท่าใดก็ได้ ... เป็นเวลา 3 เดือน) เป็นที่ต้องการอย่างมากและฉันก็ไม่แน่ใจว่ามีตัวเลือกอื่นใดบ้าง ตัวอย่างเช่นสิ่งหนึ่งที่ฉันคิดถึงคือ "บันทึกทุกแบบสอบถามที่คุณเรียกใช้" เมื่อทำการซ่อมแซมและทำการค้นคว้าข้อมูลมันมีค่ามากที่จะมีการสำรองข้อมูลการสืบค้นของรุ่นที่แตกต่างกันของแบบสอบถามที่ฉันเรียกใช้ หรือเมื่อฉันรู้ว่าฉันไม่มีการสำรองข้อมูลของแบบสอบถามที่ฉันกำลังทำงานใน 2 เดือนที่ผ่านมา ชี้แจง: สตูดิโอการจัดการเซิร์ฟเวอร์ SQL ไม่มีการสนับสนุนเพิ่มเติมอย่างเป็นทางการ แต่มีเครื่องมือบางอย่างที่นั่น SSMS Tools Pack เป็นชุดที่ฉันชอบมาก (รุ่น 2005, 2008) แต่ค่าลิขสิทธิ์สำหรับปี 2012 นั้นแย่มาก (ฉันจะจ่ายค่าลิขสิทธิ์ที่สมเหตุสมผล แต่นั่นไม่ใช่คำถามที่นี่) ฉันได้พบSSMS Boost …

1
SQL Server จะเตือนเกี่ยวกับการให้สิทธิ์หน่วยความจำมากเกินไปเมื่อใด
เงื่อนไขใดบ้างที่ทำให้เกิดคำเตือนแผนการดำเนินการ"ให้เงินทุนมากเกินไป" ? หน่วยความจำแบบสอบถามให้ตรวจพบ "ExcessiveGrant" ซึ่งอาจส่งผลกระทบต่อความน่าเชื่อถือ ขนาดการให้สิทธิ์: เริ่มต้น 5128 KB, สุดท้าย 5128 KB, ใช้แล้ว 16 KB SSMS แผนสำรวจ Showplan xml <Warnings> <MemoryGrantWarning GrantWarningKind="Excessive Grant" RequestedMemory="5128" GrantedMemory="5128" MaxUsedMemory="16" /> </Warnings>

1
INSERT แบบแถวเดียว…เลือกช้ากว่าการเลือกแบบแยก
รับตารางฮีปต่อไปนี้ด้วย 400 แถวหมายเลขตั้งแต่ 1 ถึง 400: DROP TABLE IF EXISTS dbo.N; GO SELECT SV.number INTO dbo.N FROM master.dbo.spt_values AS SV WHERE SV.[type] = N'P' AND SV.number BETWEEN 1 AND 400; และการตั้งค่าต่อไปนี้: SET NOCOUNT ON; SET STATISTICS IO, TIME OFF; SET STATISTICS XML OFF; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ต่อไปนี้SELECTเสร็จสมบูรณ์คำสั่งในรอบ6 …

1
วิธีล้างข้อมูลเร็วที่สุดคืออะไร
สถานการณ์: เรามีสองตารางTbl1& Tbl2บนเซิร์ฟเวอร์สมาชิก Tbl1จะถูกจำลองแบบจากสำนักพิมพ์Server Aและมันมีสองทริกเกอร์ - แทรกและการปรับปรุง Tbl2ทริกเกอร์แทรกและปรับปรุงข้อมูลลงใน ตอนนี้เราต้องกำจัด (ประมาณ 900 ล้านบันทึก) จากTbl2ที่มีทั้งหมด 1,000+ ล้านบันทึก ด้านล่างคือการกระจายข้อมูลสำหรับหนึ่งเดือนถึงหนึ่งนาที หนึ่งเดือน - 14986826 แถว หนึ่งวัน - 483446 แถว หนึ่งชั่วโมง - 20143 แถว หนึ่งนาที - 335 แถว สิ่งที่ฉันกำลังมองหา วิธีที่เร็วที่สุดในการล้างข้อมูลนั้นโดยไม่มีปัญหาการผลิตความสอดคล้องของข้อมูลและอาจไม่มีการหยุดทำงาน ดังนั้นฉันคิดว่าจะทำตามขั้นตอนด้านล่าง แต่ติดอยู่ :( ขั้นตอน: BCP จากข้อมูลที่ต้องการจากตาราง Tbl2 ที่มีอยู่ (ประมาณ 100 ล้านบันทึกอาจใช้เวลาประมาณ 30 นาที) สมมติว่าฉันเริ่มทำกิจกรรมในวันที่ 1Fab2018 10:00 …

1
เหตุใดตารางที่ได้รับนี้จึงปรับปรุงประสิทธิภาพ
ฉันมีแบบสอบถามซึ่งใช้สตริง json เป็นพารามิเตอร์ json เป็นอาร์เรย์ของคู่ละติจูดและลองจิจูด ตัวอย่างอินพุตอาจเป็นดังต่อไปนี้ declare @json nvarchar(max)= N'[[40.7592024,-73.9771259],[40.7126492,-74.0120867] ,[41.8662374,-87.6908788],[37.784873,-122.4056546]]'; มันเรียก TVF ที่คำนวณจำนวนจุดที่น่าสนใจรอบ ๆ จุดทางภูมิศาสตร์ที่ระยะ 1,3,5,10 ไมล์ create or alter function [dbo].[fn_poi_in_dist](@geo geography) returns table with schemabinding as return select count_1 = sum(iif(LatLong.STDistance(@geo) <= 1609.344e * 1,1,0e)) ,count_3 = sum(iif(LatLong.STDistance(@geo) <= 1609.344e * 3,1,0e)) ,count_5 = sum(iif(LatLong.STDistance(@geo) <= 1609.344e …

2
วิธีการติดตั้งโมดูลเพิ่มเติม pg_trgm
ฉันต้องการทราบวิธีการติดตั้งโมดูลpg_tgrmตามที่ใช้ในรูปแบบการจัดทำดัชนีแบบ Trigram ที่ช่วยให้คุณทำรูปแบบการค้นหาที่ไม่ได้ทอดสมอบนดัชนี WHERE foo LIKE '%bar%';

6
ALTER INDEX ALL REBUILD ใช้พื้นที่บันทึกธุรกรรมมากขึ้นด้วยรูปแบบการกู้คืนข้อมูลที่ง่ายกว่าการสร้างดัชนีแต่ละรายการใหม่หรือไม่
การดำเนินการ "ALTER INDEX ALL REBUILD" ใน SQL Server 2012 ล้มเหลวเนื่องจากบันทึกธุรกรรมหมดพื้นที่ ดัชนีไม่เคยถูกจัดระเบียบใหม่หรือสร้างใหม่ดังนั้นการกระจายตัวจึงมากกว่า 80% สำหรับเกือบทั้งหมด DB ใช้รูปแบบการกู้คืนอย่างง่าย ฉันสันนิษฐานว่าต่อไปนี้การดำเนินการแต่ละดัชนีดำเนินการโดยรูปแบบ "ALL" ของคำสั่งข้อมูลบันทึกธุรกรรมจะถูกล้างออกก่อนที่จะสร้างดัชนีครั้งต่อไป นั่นเป็นวิธีการใช้งานจริงหรือดัชนีสร้างใหม่ราวกับว่าพวกเขาเป็นส่วนหนึ่งของการทำธุรกรรมเดียว? กล่าวอีกนัยหนึ่งฉันสามารถลดการเติบโตของบันทึกธุรกรรมโดยการเขียนสคริปต์เพื่อดำเนินการสร้างใหม่ทีละรายการหรือไม่ มีปัจจัยอื่น ๆ ที่ต้องพิจารณาอีกหรือไม่?
18 sql-server  index 

2
คำถามเกี่ยวกับประสิทธิภาพของ "SELECT TOP"
ฉันมีข้อความค้นหาที่ทำงานเร็วขึ้นมากเมื่อเลือกtop 100และช้ากว่าโดยไม่top 100เลือก จำนวนระเบียนที่ส่งคืนคือ 0 คุณสามารถอธิบายความแตกต่างในแผนคิวรีหรือแชร์ลิงก์ที่อธิบายความแตกต่างดังกล่าวได้หรือไม่ แบบสอบถามที่ไม่มีtopข้อความ: SELECT --TOP 100 * FROM InventTrans JOIN InventDim ON InventDim.DATAAREAID = 'dat' AND InventDim.INVENTDIMID = InventTrans.INVENTDIMID WHERE InventTrans.DATAAREAID = 'dat' AND InventTrans.ITEMID = '027743' AND InventDim.INVENTLOCATIONID = 'КзРЦ Алмат' AND InventDim.ECC_BUSINESSUNITID = 'Казахстан'; แผนแบบสอบถามสำหรับข้างต้น (ไม่รวมtop): https://pastebin.com/cbtJpxFf สถิติ IO และ TIME (ไม่รวมtop): SQL Server …

6
ข้อเสียของการมีคอลัมน์จำนวนเต็มเดียวเป็นคีย์หลักเสมอ
ภายในเว็บแอปพลิเคชั่นตัวหนึ่งที่ฉันทำงานอยู่การดำเนินการฐานข้อมูลทั้งหมดจะถูกทำให้เป็นนามธรรมโดยใช้แหล่งเก็บข้อมูลทั่วไปที่กำหนดไว้ผ่าน Entity Framework ORM อย่างไรก็ตามเพื่อให้มีการออกแบบที่เรียบง่ายสำหรับที่เก็บข้อมูลทั่วไปตารางที่เกี่ยวข้องทั้งหมดจะต้องกำหนดจำนวนเต็มเฉพาะ ( Int32ใน C #, intใน SQL) จนถึงขณะนี้ได้รับเสมอ PK IDENTITYของตารางและยังได้ คีย์ต่างประเทศมีการใช้งานอย่างหนักและจะอ้างอิงคอลัมน์จำนวนเต็มเหล่านี้ จำเป็นสำหรับทั้งความสอดคล้องและสำหรับการสร้างคุณสมบัติการนำทางโดย ORM โดยทั่วไปแล้วแอปพลิเคชันเลเยอร์จะดำเนินการดังต่อไปนี้: การโหลดข้อมูลเริ่มต้นจากตาราง (*) -SELECT * FROM table อัพเดท -UPDATE table SET Col1 = Val1 WHERE Id = IdVal ลบ -DELETE FROM table WHERE Id = IdVal ส่วนแทรก -INSERT INTO table (cols) VALUES (...) …

2
ทำไมถึงเป็น TIME ZONE nondeterministic
AT TIME ZONEดูเหมือนว่าSQL Server 2016 จะเป็น nondeterministic อย่างไรก็ตามฉันไม่สามารถค้นหาเอกสารอย่างเป็นทางการที่ระบุสิ่งนี้หรือให้เหตุผลเกี่ยวกับเหตุผลที่อยู่เบื้องหลัง ทำไมต้องเป็นAT TIME ZONEnondeterministic ตัวอย่างที่แสดงให้เห็นถึงความไม่มุ่งมั่น การดำเนินการ: CREATE TABLE Test ( LegacyTimestamp DATETIME, Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED ); ส่งคืนข้อผิดพลาดต่อไปนี้: Msg 4936, Level 16, State 1, Line 1 Computed column 'Timestamp' in table 'Test' cannot be persisted because the …

1
ฐานข้อมูลพิเศษ“ postgres” มีไว้เพื่ออะไร?
ฉันมีเซิร์ฟเวอร์ PostgreSQL ที่มีฐานข้อมูลหลายตัวกำลังทำงานอยู่ ฐานข้อมูลหนึ่งถูกเรียกใช้postgresและมันอยู่ที่นั่นตั้งแต่เริ่มต้น ฉันไม่เห็นตารางใด ๆ ภายในและฉันไม่เคยใช้มันอย่างชัดเจน แต่ฉันสังเกตเห็นว่าผู้ใช้ทุกคนได้รับอนุญาตให้สร้างตารางภายในฐานข้อมูล (นี่ไม่ใช่สิ่งที่ฉันต้องการ - ฉันไม่ต้องการให้ผู้ใช้ยกเว้นผู้ดูแลระบบสร้าง ตารางใดก็ได้) ฉันรู้สึกว่ามันเป็นฐานข้อมูลชนิดพิเศษบางอย่างที่จำเป็นสำหรับการทำงานปกติของเซิร์ฟเวอร์ แต่จุดประสงค์ของมันคืออะไร ข้อมูลประเภทใด (หรืออาจ) เก็บไว้ภายใน มันเก็บข้อมูลเมตาเกี่ยวกับฐานข้อมูลอื่น ๆ (เช่น the information_schema?) สิ่งที่น่ารังเกียจเกิดขึ้นหรือไม่ถ้าฉันเพิกถอนconnectสิทธิ์ในฐานข้อมูลนี้จากสาธารณะ หรือถ้าฉันวางมันลง? ฉัน googled เป็นเวลาครึ่งชั่วโมง แต่มักจะมีสิ่งที่ไม่เกี่ยวข้องอย่างสมบูรณ์เพราะคำpostgresนี้ยังใช้สำหรับผู้ใช้postgresและ DBMS เอง
18 postgresql 

4
ทำไมฉันไม่สามารถใช้ตัวแปรใน T-SQL เหมือนที่ฉันจินตนาการได้
ยกโทษให้ฉันฉันเป็นนักพัฒนาที่ได้ย้ายไปยังโลกของ SQL ฉันคิดว่าฉันสามารถปรับปรุง SQL ด้วยการเพิ่มตัวแปร แต่มันไม่ทำงานเหมือนที่ฉันคาดไว้ มีใครบอกฉันได้ไหมว่าทำไมสิ่งนี้ถึงใช้งานไม่ได้ ฉันไม่ต้องการทำงานฉันต้องการทราบเหตุผลว่าทำไมมันถึงใช้งานไม่ได้ฉันคิดว่ามันควรจะเป็นเพราะฉันแน่ใจว่ามีเหตุผลที่ดี DECLARE @DatabaseName varchar(150) SET @DatabaseName = 'MyAmazingDatabaseName' CREATE DATABASE @DatabaseName GO USE @DatabaseName GO

1
จะป้องกันการสร้างสถิติในคอลัมน์ได้อย่างไร?
ฉันมีตารางที่มีคอลัมน์ที่ฉันไม่ต้องการให้สร้างหรืออัปเดตสถิติ ฉันจะได้ค่าประมาณการเข้าร่วมที่ดีขึ้นถ้าฉันบังคับให้เครื่องมือเพิ่มประสิทธิภาพการสืบค้นใช้ความหนาแน่นของสถิติในคีย์หลักซึ่งต่างจากสถิติฮิสโตแกรมในคอลัมน์นั้น สถิติการอัปเดตอัตโนมัติและสร้างอัตโนมัติอยู่ที่ระดับฐานข้อมูลและฉันไม่สามารถเปลี่ยนแปลงได้ หากคุณต้องการแนะนำทางเลือกอื่น ๆ ในการป้องกันการสร้างสถิติโปรดจำไว้ว่าตารางนั้นถูกใช้ในมุมมองที่อ้างอิงโดยการสืบค้นหลายพันรายการ ฉันไม่สามารถควบคุมคิวรีที่เรียกใช้ กลยุทธ์เริ่มต้นของฉันคือการสร้างสถิติในคอลัมน์ด้วยNOCOMPUTEและSAMPLE 0 ROWSตัวเลือก ฉันรู้สึกว่า SQL Server จะไม่สร้างสถิติในคอลัมน์ที่มีวัตถุสถิติโดยอัตโนมัติ แต่สิ่งนี้เกิดขึ้นบนเซิร์ฟเวอร์ dev และ QA ของเรา COL_GROUPสถิติใหม่ที่สร้างขึ้นสำหรับ NORECOMPUTEสถิติของฉันไม่ได้รับการปรับปรุง ฉันไม่รู้ว่าทำไมสถิติจึงถูกสร้างขึ้นและฉันไม่สามารถเรียกใช้ตัวเองด้วยการเรียกใช้คิวรีได้ มีวิธีป้องกัน SQL Server จากการสร้างสถิติโดยอัตโนมัติในหนึ่งคอลัมน์หรือไม่? ตารางของฉันมีสองคอลัมน์เท่านั้นดังนั้นโซลูชันที่ป้องกันไม่ให้สร้างสถิติอัตโนมัติในตารางเดียวจะช่วยแก้ปัญหาของฉันได้เช่นกัน แฟล็กการติดตาม 4139 และ 2371 เปิดอยู่ในกรณีที่สร้างความแตกต่าง หากคุณต้องการเล่นกับโครงสร้างตารางฉันได้รวมไว้และข้อมูลตัวอย่างด้านล่าง: CREATE TABLE X_NO_COLUMN_STATS( [COL_USER] [varchar](256) NOT NULL, [COL_GROUP] [int] NOT NULL, CONSTRAINT [PK_X_NO_COLUMN_STATS] PRIMARY KEY CLUSTERED ( …

6
วิธีที่ต้องการในการจัดเก็บ DateTime
เราสามารถจัดเก็บข้อมูลวันที่และเวลาได้หลายวิธี วิธีที่ดีที่สุดในการจัดเก็บข้อมูล DateTime คืออะไร การจัดเก็บวันที่และเวลาใน2 คอลัมน์แยกกันหรือหนึ่งคอลัมน์โดยใช้ DateTime ? คุณช่วยอธิบายได้ไหมว่าทำไมวิธีการนั้นถึงดีกว่า? (ลิงก์ไปยังเอกสาร MySQL สำหรับการอ้างอิงคำถามทั่วไปไม่ใช่เฉพาะ MySQL) ประเภทวันที่และเวลา : วันที่และเวลา

2
DBMS ใดมีการเปรียบเทียบที่เป็นทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
หมายเหตุคำถามนี้คือผู้ขาย / รุ่นที่ไม่เชื่อเรื่องพระเจ้า ดูเหมือนว่าฉันในฐานะวิทยากร (ผู้พิมพ์ดีดนักเขียน) ของภาษาอังกฤษมีเหตุผลที่คาดว่าจะได้คำที่ถูกต้อง แต่ไม่จำเป็นต้องมีสำเนียงที่ถูกต้องไปในทิศทางที่ถูกต้อง: ตามที่ฉันรำพึงใน tete-a-tete กับ Chloe the maitre d'hotel ที่ร้านอาหาร Champs-Elysees ในขณะที่รอ garcon เพื่อดึง jalapeno sateed ของฉัน ... คุณได้รับความคิดด้วยสิ่งนั้น ดังนั้นวันนี้ฉันคิดว่าฉันต้องการเงื่อนไขการค้นหาเพื่อใช้การเปรียบเทียบที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์เล็ก แต่เน้นเรื่องเล็ก แต่ไม่สามารถหาได้ มีเหตุผลที่ดีสำหรับสิ่งนี้หรือเป็นเพียงกรณีการใช้งานที่หายาก? นี่คือตัวอย่างของเอกสารบางอย่างที่ฉันดู (คิดว่าผู้ขาย / รุ่นไม่เชื่อเรื่องพระเจ้า): ชื่อเรียงเซิร์ฟเวอร์ SQL (SQL Server 2008 R2)

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