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

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

1
SQL Server 2017 รวมถึงเวอร์ชันที่เก่ากว่ารองรับขนาดเซกเตอร์ของดิสก์หรือไม่
ดิสก์ (ใช้คำพูดอย่างหลวม ๆ เพื่อไม่เพียงรวมสื่อการหมุนเท่านั้น แต่สื่อที่ไม่ใช่การหมุน [SSD, NVMe ฯลฯ ]) ไดรฟ์ยังคงพัฒนาอย่างต่อเนื่องในรูปแบบและฮาร์ดแวร์พื้นฐาน ส่วนนี้เป็น "การปรับปรุง" จากขนาดเซกเตอร์กายภาพ 512 ไบต์เป็นขนาดเซกเตอร์กายภาพ 4k ซึ่งเปลี่ยนเค้าโครงบนดิสก์ (512n, 512e, 4kn) วิวัฒนาการต่อไปนี้ใช้ขนาดเซกเตอร์กายภาพ 8k ซึ่งผู้ผลิตบางรายเริ่มผลิตและตั้งค่าในการผลิต ระบุขั้นตอนต่อไปนี้ดิสก์ขนาดเซ็กเตอร์ 8k ได้รับการสนับสนุนใน Windows หรือไม่ SQL Server ใส่ใจกับขนาดเซกเตอร์หรือไม่

1
SET NOCOUNT ข้อผิดพลาดในการจัดการการโทร SQL หลังจากอัพเกรด
เรากำลังอัพเกรดสภาพแวดล้อมการทดสอบของเราด้วยเซิร์ฟเวอร์ใหม่และ Microsoft SQL Server รุ่นที่ปรับปรุงแล้วและพบปัญหา บนเซิร์ฟเวอร์ใหม่รหัสเก่าของเราจะได้รับ "การดำเนินการไม่ได้รับอนุญาตเมื่อวัตถุถูกปิด" เมื่อดำเนินการขั้นตอนการจัดเก็บบางอย่าง ข้อความนี้ไม่เคยปรากฏบนเซิร์ฟเวอร์เก่า เมื่อเราติดตามมันปัญหาสามารถแก้ไขได้โดยการเพิ่มSET NOCOUNT ON;ขั้นตอนการจัดเก็บ ฉันดูค่าเริ่มต้นในฐานข้อมูลและไม่เห็นการตั้งค่าที่แตกต่าง (SQL Server 2008 เทียบกับ SQL Server 2014) ที่เกี่ยวข้องกับค่าเริ่มต้น ฉันควรตั้งค่าแบบใดเพื่อแก้ไขปัญหานี้ทั่วโลกโดยไม่จำเป็นต้องเพิ่มSET NOCOUNT ONโปรแกรมที่เก็บไว้เป็นพันรายการ

1
ดัชนีที่บีบอัด SQL Server ยังคงถูกบีบอัดในการสร้างใหม่โดยไม่ระบุการบีบอัดข้อมูลหรือไม่
หลังจากสร้างดัชนี SQL Server อีกครั้งโดยใช้การบีบอัดหน้า ( ALTER INDEX IX1 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)) ให้ทำการสร้างใหม่ในภายหลัง (ตามที่สคริปต์การบำรุงรักษาบางรายการผ่านเกณฑ์การแตกแฟรกเมนต์) จำเป็นต้องระบุการบีบอัดข้อมูลอีกครั้งหรือไม่ มิฉะนั้นดัชนีจะแตกอย่างมีประสิทธิภาพหรือไม่

1
ทำไม PostgreSQL จึงเลือกการเข้าร่วมที่มีราคาแพงกว่า?
PostgreSQL ใช้ค่าเริ่มต้นบวก default_statistics_target=1000 random_page_cost=1.5 รุ่น PostgreSQL 10.4 on x86_64-pc-linux-musl, compiled by gcc (Alpine 6.4.0) 6.4.0, 64-bit ฉันดูดและวิเคราะห์แล้ว แบบสอบถามตรงไปตรงมามาก: SELECT r.price FROM account_payer ap JOIN account_contract ac ON ap.id = ac.account_payer_id JOIN account_schedule "as" ON ac.id = "as".account_contract_id JOIN schedule s ON "as".id = s.account_schedule_id JOIN rate r ON s.id = …

2
การเรียกคืนหน้าเว็บออนไลน์ที่มีจำนวนการ จำกัด 1,000 ครั้ง
ฉันได้รับมอบหมายให้พยายามกู้คืนฐานข้อมูลที่ประสบจากความเสียหาย (เนื่องจากความล้มเหลวของ I / O ซึ่งได้รับการแก้ไขตั้งแต่) ฉันไม่คุ้นเคยกับฐานข้อมูลหรือสิ่งที่มีอยู่ ฉันได้รับการสำรองข้อมูลเต็มรูปแบบเก่า (~ 3 สัปดาห์) และชุดบันทึกธุรกรรม ... แต่มีบันทึกธุรกรรมขาดหายไปดังนั้นฉันสามารถกู้คืนได้จนถึงวันที่กำหนด ข้อมูลหายไป 2.5 สัปดาห์ (และมีข้อมูลจำนวนมากถูกเพิ่มลงในฐานข้อมูลนี้อย่างต่อเนื่อง) ฉันยังได้รับสำเนาของฐานข้อมูลที่เสียหาย (ซึ่งสามารถเข้าถึงได้ แต่มีหลายหน้าเสียหาย / ขาดหายไป) ฉันได้ลองDBCC CHECKDBคำสั่งทั่วไป(ยังไม่repair_allow_data_lossว่าจะเป็นทางเลือกสุดท้ายของฉันถ้าไม่มีอะไรทำงาน) หลังจากหลายคนมาและไปที่ฐานข้อมูล (db ​​เป็นสัตว์ประหลาดตัวเล็ก ๆ 1.5 เทราไบต์และทุกอย่างที่ฉันทำช้าและใช้เวลาสักครู่) ฉันพยายามทำการกู้คืนหน้าออนไลน์จากการสำรองข้อมูลที่ดีที่รู้จักล่าสุดสำหรับเพจที่เสียหาย ในการทำเช่นนั้นฉันได้ทำสคริปต์ที่สร้างRESTORE DATABASE <foo> PAGE='pages' FROM DISK='<bar.bak>'คำสั่งจำนวนมากจากDBCC CHECKDBผลลัพธ์ (โดยปกติ regex และแตกต่างกันไป) ... ดีมากจนถึงตอนนี้มันใช้งานได้จนถึงจุดที่บอกว่าฉันมีจำนวนหน้าถึง 1,000 หน้า ต่อไฟล์ (มี 8 ไฟล์ใน …

3
เหตุใดการเลือกคอลัมน์ผลลัพธ์ทั้งหมดของแบบสอบถามนี้จึงเร็วกว่าการเลือกคอลัมน์เดียวที่ฉันสนใจ
ฉันมีแบบสอบถามที่ใช้select *ไม่เพียง แต่อ่านน้อยลง แต่ยังใช้เวลา CPU น้อยกว่าการใช้select c.Fooอย่างมาก นี่คือแบบสอบถาม: select top 1000 c.ID from ATable a join BTable b on b.OrderKey = a.OrderKey and b.ClientId = a.ClientId join CTable c on c.OrderId = b.OrderId and c.ShipKey = a.ShipKey where (a.NextAnalysisDate is null or a.NextAnalysisDate < @dateCutOff) and b.IsVoided = 0 and …


2
ปัญหาการประมาณค่าเชิง Cardinality ของการเข้าร่วมวงใน
ฉันพยายามเข้าใจว่าทำไมการประมาณแถวจึงผิดอย่างยิ่งนี่คือกรณีของฉัน: เข้าร่วมง่าย - โดยใช้ SQL Server 2016 sp2 (ปัญหาเดียวกันใน sp1), dbcompatiblity = 130 select Amount_TransactionCurrency_id, CurrencyShareds.id from CurrencyShareds INNER JOIN annexes ON Amount_TransactionCurrency_id = CurrencyShareds.Id option (QUERYTRACEON 3604, QUERYTRACEON 2363); SQL ประมาณ 1 แถวโดยที่ 107131 และเลือกวนซ้ำซ้อนกัน ( ลิงก์ไปยังแผน ) หลังจากอัปเดตสถิติใน CurrencyShared แล้วการประมาณการก็ใช้ได้และการเลือกผสานเข้าร่วม ( ลิงก์ไปยังแผนใหม่ ) ทันทีที่มีการเพิ่มเพียงหนึ่งระเบียนใน CurrencyShareds สถิติก็จะกลายเป็น "เก่า" และ …

2
มีวิธีที่มีประสิทธิภาพในการดูสาเหตุของ "ข้อมูลสตริงหรือไบนารีจะถูกตัดทอน" หรือไม่?
นี่คือการติดตามคำถามนี้ นอกจากนี้ยังเกี่ยวข้องกับคำขอคุณลักษณะนี้จาก Microsoft อย่างไรก็ตามผ่านไปหลายปีแล้วและมีข่าวสำคัญ ๆ ออกสู่ตลาดนับตั้งแต่มีการรายงาน คำถาม: SQL Server 2017 มีกลไกใดบ้างที่ช่วยให้ค้นหาสาเหตุที่แท้จริงของข้อผิดพลาดนี้ได้หรือไม่? หรือยากที่จะตรวจสอบเหมือนเมื่อประมาณ 9 ปีที่แล้วเมื่อมีการรายงานปัญหา

1
ทำไม LEFT JOIN นี้ถึงทำงานแย่กว่า LEAT JOIN LATERAL มากนัก?
ฉันมีตารางต่อไปนี้ (นำมาจากฐานข้อมูล Sakila): film: film_id คือ pkey นักแสดง: actor_id คือกุญแจ film_actor: film_id และ actor_id เป็น fkeys สำหรับภาพยนตร์ / นักแสดง ฉันกำลังเลือกภาพยนตร์เฉพาะเรื่อง สำหรับหนังเรื่องนี้ฉันต้องการให้นักแสดงทุกคนเข้าร่วมในภาพยนตร์เรื่องนี้ด้วย ฉันมีสองคำสั่งสำหรับการนี้: หนึ่งที่มีและเป็นหนึ่งเดียวกับLEFT JOINLEFT JOIN LATERAL select film.film_id, film.title, a.actors from film left join ( select film_actor.film_id, array_agg(first_name) as actors from actor inner join film_actor using(actor_id) group by film_actor.film_id ) …

1
การบีบอัดข้อมูลสำรองทำให้เกิดความเสียหายในฐานข้อมูล TDE SQL 2017
บน SQL Server 2017 (CU3) เมื่อใดก็ตามที่ฉันเปิดใช้งานการบีบอัดข้อมูลสำรองในหนึ่งในฐานข้อมูล TDE ของฉันกระบวนการสำรองข้อมูลจะทำให้หน้าเว็บที่ระบุในฐานข้อมูลเสียหาย ถ้าฉันเรียกใช้การสำรองข้อมูลโดยไม่มีการบีบอัดจะไม่ได้รับความเสียหาย นี่คือขั้นตอนที่ฉันได้ดำเนินการเพื่อตรวจสอบและทำให้เกิดปัญหานี้อีกครั้ง: รัน DBCC CheckDB บนฐานข้อมูล "TDE_DB1"; ทุกอย่างดีไม่มีข้อผิดพลาด สำรองฐานข้อมูลได้สำเร็จโดยไม่ต้องบีบอัด RESTORE VERIFYONLY กล่าวว่าทุกอย่างดี กู้คืนฐานข้อมูลเป็น "TDE_DB2" ได้สำเร็จ; ทั้งหมดเป็นสิ่งที่ดี DBCC CheckDB ไม่แสดงข้อผิดพลาด; สำรองฐานข้อมูล "TDE_DB1" สำเร็จด้วยการบีบอัด กู้คืนข้อผิดพลาดยืนยันว่า "ตรวจพบความเสียหายต่อชุดข้อมูลสำรอง"; พยายามกู้คืนฐานข้อมูลเป็น "TDE_DB2"; ข้อผิดพลาดการพูดว่า "RESTORE ตรวจพบข้อผิดพลาดในหน้า (1: 92454) ในฐานข้อมูล" ทำซ้ำขั้นตอนที่ 1-3; ทั้งหมดเป็นสิ่งที่ดี; DROP "TDE_DB1" และ "TDE_DB2"; กู้คืน "TDE_DB1" จากการสำรองข้อมูล …

1
PostgreSQL 9.5 จะไม่เริ่มทำงานหลังจากที่ Windows 10 fall update
ฉันได้ติดตั้ง Windows 10 Fall update (1709) และตอนนี้เซิร์ฟเวอร์ PostgreSQL 9.5 ของฉันจะไม่เริ่มทำงาน ทำงานเมื่อวานนี้ก่อนการอัปเดตและฉันไม่ได้ทำการเปลี่ยนแปลงใด ๆ กับการกำหนดค่า ฉันได้ตรวจสอบตัวแสดงเหตุการณ์แล้วและพบข้อความแสดงข้อผิดพลาด: 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_monetary": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_numeric": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_time": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST …

1
ชื่อตาราง SQL Server ที่ขึ้นต้นด้วย # ในฐานข้อมูลผู้ใช้ไม่ใช่ใน tempdb ไม่ใช่ตาราง temp
#อย่างใดทศวรรษที่ผ่านมาตารางได้สร้างขึ้นในฐานข้อมูลของเราที่เริ่มต้นด้วย มันแสดงให้เห็นในวัตถุ Explorer tempdbที่ใต้ฐานข้อมูลของแอปไม่ได้อยู่ใน ด้วยเหตุผลบางอย่าง Azure จะไม่นำเข้าฐานข้อมูลเช่นนี้ เราไม่สามารถวางเปลี่ยนชื่อหรือโต้ตอบกับมันได้ ฉันได้ลองลบจาก Object Explorer, Script Drop , Renameจาก GUI และพวกมันไม่ทำงานเลย เราอยู่บน SQL 2008 R2 drop table [*app*].[dbo]."#OBSOLETE"; Database name '*app*' ignored, referencing object in tempdb. Msg 3701, Level 11, State 5, Line 1 Cannot drop the table '#OBSOLETE', because it does not exist …

4
% ในอนุประโยคนี้ทำอะไรได้บ้าง
ฉันกำลังฝึกอบรมและสคริปต์ตัวใดตัวหนึ่งมีคำสั่งต่อไปนี้: SELECT SUM(Col2) FROM clust_table WHERE Col1 % 3 = 1 ฉันต้องการทราบว่าตัวอย่างข้อมูลนี้มีไว้ในส่วนคำสั่ง WHERE: Col1 % 3 = 1 ฉันทำการวิจัยบนอินเทอร์เน็ตและไม่พบการอ้างอิงเกี่ยวกับคำสั่งนี้
13 sql-server  t-sql 

2
DBP FREEPROCCACHE และ DBCC FREESYSTEMCACHE ('แผนการ SQL') ไม่ทำอะไรเลยเพื่อเพิ่มหน่วยความจำ CACHESTORE_SQLCP ฟรี
CACHESTORE_SQLCP Sql Plans ใช้เวลา> 38 GB หลังจากสองสามวัน เรากำลังใช้งานตัวเลือก "เพิ่มประสิทธิภาพสำหรับภาระงาน Ad hoc" (Entity Framework และการรายงานที่กำหนดเองสร้างโฆษณาจำนวนมาก!) SQL Server 2016 SE 3.00.2164.0.v1 บน AWS RDS พร้อมการจำลองแบบหลาย AZ เมื่อฉันวิ่ง: DBCC FREESYSTEMCACHE('SQL Plans'); หรือ DBCC FREEPROCCACHE หรือ DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL หรือ DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL; ดูเหมือนจะไม่ชัดเจนว่า: SELECT TOP 1 type, name, …

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