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

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

2
การคำนวณปริมาณสต็อคตามบันทึกการเปลี่ยนแปลง
ลองนึกภาพว่าคุณมีโครงสร้างตารางต่อไปนี้: LogId | ProductId | FromPositionId | ToPositionId | Date | Quantity ----------------------------------------------------------------------------------- 1 | 123 | 0 | 10002 | 2018-01-01 08:10:22 | 5 2 | 123 | 0 | 10003 | 2018-01-03 15:15:10 | 9 3 | 123 | 10002 | 10004 | 2018-01-07 21:08:56 | 3 4 …

1
เพิ่มประสิทธิภาพการค้นหา 'ล่าสุด' ใน Postgres บนแถว 20M
ตารางของฉันมีลักษณะดังนี้: Column | Type | -----------------------+-------------------+ id | integer | source_id | integer | timestamp | integer | observation_timestamp | integer | value | double precision | มีดัชนีอยู่ใน source_id, การประทับเวลาและในคอมโบของการประทับเวลาและรหัส ( CREATE INDEX timeseries_id_timestamp_combo_idx ON timeseries (id, timeseries DESC NULLS LAST)) มีแถวอยู่ 20M (ตกลงมี 120M แต่ 20M กับ source_id = …

2
ไม่สิ้นสุดการค้นหาใน Query Store
ฉันจะบอกตั้งแต่ต้นว่าคำถาม / ปัญหาของฉันมีลักษณะคล้ายกับนี้ก่อนหน้านี้หนึ่ง แต่เนื่องจากผมไม่แน่ใจว่าถ้าสาเหตุหรือข้อมูลเริ่มต้นเหมือนกันฉันตัดสินใจที่จะโพสต์คำถามของฉันที่มีรายละเอียดบางอย่างมากขึ้น ปัญหาในมือ: ในเวลาไม่กี่ชั่วโมง (ใกล้ถึงสิ้นวันทำการ) ตัวอย่างการผลิตจะเริ่มทำงานผิดปกติ: CPU สูงสำหรับอินสแตนซ์ (จากพื้นฐานประมาณ 30% มันจะเพิ่มขึ้นเป็นสองเท่าและยังคงเติบโตอยู่) เพิ่มจำนวนธุรกรรม / วินาที (แม้ว่าการโหลดแอปจะไม่เห็นการเปลี่ยนแปลงใด ๆ ) เพิ่มจำนวนเซสชันว่าง เหตุการณ์การบล็อกแปลก ๆ ระหว่างเซสชันที่ไม่เคยแสดงพฤติกรรมนี้ (แม้จะอ่านเซสชันที่ไม่มีข้อผูกมัดก็ทำให้เกิดการบล็อก) การรอช่วงบนสุดเป็นช่วงที่ไม่ใช่การสลักหน้าในอันดับที่ 1 โดยมีการล็อกตำแหน่งที่ 2 การตรวจสอบเบื้องต้น: การใช้ sp_whoIsActive เราเห็นว่าการสืบค้นที่ดำเนินการโดยเครื่องมือตรวจสอบของเราตัดสินใจที่จะทำงานช้ามากและจับ CPU จำนวนมากสิ่งที่ไม่เคยเกิดขึ้นมาก่อน ระดับการแยกของมันถูกอ่านปราศจากข้อผูกมัด เราดูแผนที่เราเห็นตัวเลขที่แปลกประหลาด: StatementEstRows = "3.86846e + 010" โดยมีข้อมูลประมาณ 150 TB เพื่อส่งคืน เราสงสัยว่าคุณลักษณะการตรวจสอบข้อความค้นหาของเครื่องมือตรวจสอบนั้นเป็นสาเหตุดังนั้นเราจึงปิดการใช้งานคุณลักษณะนี้ (เราได้เปิดตั๋วกับผู้ให้บริการของเราเพื่อตรวจสอบว่าพวกเขาตระหนักถึงปัญหาใด ๆ หรือไม่) จากเหตุการณ์แรกนั้นมันเกิดขึ้นอีกสองสามครั้งทุกครั้งที่เราฆ่าเซสชันทุกอย่างกลับสู่ปกติ …

2
รับจำนวนที่เพิ่มขึ้นของมูลค่ารวมในตารางที่เข้าร่วม
ฉันมีสองตารางในฐานข้อมูล MySQL 5.7.22: และposts reasonsแต่ละแถวโพสต์มีและอยู่ในหลายเหตุผลแถว แต่ละเหตุผลมีน้ำหนักที่เกี่ยวข้องและดังนั้นแต่ละโพสต์จึงมีน้ำหนักรวมทั้งหมดที่เกี่ยวข้อง สำหรับการเพิ่มน้ำหนักแต่ละจุด 10 คะแนน (เช่น 0, 10, 20, 30, ฯลฯ ) ฉันต้องการรับจำนวนการโพสต์ที่มีน้ำหนักรวมน้อยกว่าหรือเท่ากับการเพิ่มขึ้นนั้น ฉันคาดหวังผลลัพธ์ที่จะมีลักษณะเช่นนี้: weight | post_count --------+------------ 0 | 0 10 | 5 20 | 12 30 | 18 ... | ... 280 | 20918 290 | 21102 ... | ... 1250 | 118005 1260 …

2
ส่งคืนลำดับ xml ที่แอตทริบิวต์ไม่มีอักขระเฉพาะ
พิจารณา XML อย่างง่ายต่อไปนี้: <xml> <customer name="Max"> <email address="me@you.com" /> </customer> <customer name="Erik"> <email address="erik@your-mom.com" /> </customer> <customer name="Brent"> <email address="brentcom" /> </customer> </xml> ฉันต้องการที่จะได้รับรายชื่อของ<Customer>ลำดับที่addressแอตทริบิวต์ของ<email>รายการไม่ได้@ประกอบด้วย ดังนั้นฉันต้องการผลลัพธ์ที่ดูเหมือน: <customer name="Brent"> <email address="brentcom" /> </customer> mcve : DECLARE @x XML = '<xml> <customer name="Max"><email address="me@you.com" /></customer> <customer name="Erik"><email address="erik@your-mom.com" /></customer> <customer name="Brent"><email address="brentcom" /></customer> …
10 sql-server  xml  xquery 

1
B-Tree จะปรับสมดุลในระหว่างการลบข้อมูลจากตาราง SQL Server ที่มีดัชนีคลัสเตอร์หรือไม่?
ฉันมีตารางในฐานข้อมูล SQL Server ที่มีดัชนีคลัสเตอร์ในคีย์หลัก ตารางมี 1 ล้านแถว หากฉันลบแถว 10K ออกจากตารางดัชนีจะถูกปรับโครงสร้างใหม่ในระหว่างการดำเนินการลบหรือไม่? การดำเนินการลบเป็นส่วนหนึ่งของกระบวนงานที่เก็บไว้ ในแต่ละครั้งลูกค้ามากกว่าหนึ่งรายสามารถเรียกใช้งานโพรซีเดอร์ที่เก็บไว้ได้อย่างไรก็ตามการรันแต่ละรายการจะลบชุดของแถวเอง (ระบุโดยคีย์หลัก) ฉันกำลังปิดกั้นคีย์ล็อค (ประเภท U) เมื่อลูกค้าหลายรายดำเนินการตามขั้นตอน ล็อคบล็อคเป็นของแถวจากตารางเดียวกันและไม่ได้เป็นส่วนหนึ่งของการทำธุรกรรมใด ๆ ที่ทำงานพร้อมกัน ไม่ควรมีการบล็อกใด ๆ เนื่องจากการรันแต่ละครั้งพยายามลบมันเป็นชุดของแถว การยกระดับการล็อคไม่ได้เกิดขึ้นเนื่องจากปิดอยู่ ฉันสงสัยว่าการดำเนินการลบจะต้องทำให้ดัชนีมีการปรับสมดุลและดังนั้นในระหว่างกระบวนการปรับโครงสร้างจึงสามารถใช้การล็อคปุ่มบนแถวใดก็ได้ของตาราง ฉันขอขอบคุณความคิดเห็นใด ๆ เกี่ยวกับเรื่องนี้

2
ปัญหาเกี่ยวกับการรวมเลขจำนวนเต็มถึงจำนวน (ทศนิยม)
ฉันมีสถานการณ์นี้ดูเหมือนว่า MySQL ใช้ค่าทศนิยมที่ใหญ่ที่สุดและพยายามที่จะแปลงค่าอื่น ๆ ปัญหาคือว่าแบบสอบถามนี้สร้างขึ้นโดยห้องสมุดภายนอกดังนั้นฉันจึงไม่สามารถควบคุมรหัสนี้ได้ในระดับนี้อย่างน้อย คุณมีความคิดในการแก้ไขปัญหานี้หรือไม่? SELECT 20 AS x UNION SELECT null UNION SELECT 2.2; +------+ | x | +------+ | 9.9 | -- why from 20 to 9.9 | NULL | | 2.2 | +------+ ผลลัพธ์ที่คาดหวัง +------+ | x | +------+ | 20 | -- or 20.0, doesn't …

2
ทุกชุดทำให้เกิดการคอมไพล์
เรามีแอปพลิเคชันบุคคลที่สามที่ส่งคำสั่ง T-SQL เป็นชุด ฐานข้อมูลโฮสต์อยู่ใน SQL Server 2016 Enterprise SP1 CU7, 16 คอร์และหน่วยความจำ 256GB เปิดใช้งานการปรับให้เหมาะสมที่สุดสำหรับ Ad-Hoc นี่เป็นตัวอย่างของการสอบถามที่กำลังดำเนินการ: exec sp_executesql N' IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT select field1, field2 from table1 where field1=@1 option(keep plan, keepfixed, loop join) select field3, field4 from table2 where field3=@1 option(keep plan, keepfixed, …

1
จะคูณแถวสำหรับคอลัมน์ที่มีค่าลบและศูนย์ได้อย่างไร
ฉันกำลังพยายามรับผลิตภัณฑ์ของทุกแถวสำหรับคอลัมน์ที่ระบุในการจัดกลุ่มตามแบบสอบถาม ตัวอย่างส่วนใหญ่ที่ฉันได้พบจุดที่ฉันมีต่อการรวมexp, sumและlog exp(sum(log([Column A]))) ปัญหาที่ฉันมีอยู่คือคอลัมน์มีค่าศูนย์บางค่าและทำให้ฉันได้รับข้อผิดพลาดนี้เมื่อค่าศูนย์ส่งผ่านไปยังlogฟังก์ชัน: การดำเนินการจุดลอยตัวไม่ถูกต้องเกิดขึ้น ฉันคิดว่าฉันสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยการใช้caseนิพจน์ แต่นั่นก็ไม่เป็นไปตามที่ฉันคิดว่ามันควรจะเป็นเพราะดูเหมือนว่าจะประเมินทุกกรณี select Name, Product = case when min([Value]) = 0 then 0 when min([Value]) <> 0 then exp(sum(log(I))) -- trying to get the product of all rows in this column end from ids group by Name SqlFiddle รับชุดผลลัพธ์ต่อไปนี้: Id Name Value _________________________________ …

2
หากการหยุดชะงักของเหตุการณ์ Parallelism Exchange นั้นน้อยกว่าเหยื่อจะเป็นปัญหาหรือไม่?
เราเห็นจำนวนDeadlocks แบบขนานภายในเธรดเหล่านี้จำนวนมากในสภาพแวดล้อมการผลิตของเรา (SQL Server 2012 SP2 - ใช่ ... ฉันรู้ ... ) อย่างไรก็ตามเมื่อดู Deadlock XML ที่ถูกบันทึกผ่าน Extended Events รายการเหยื่อนั้นว่างเปล่า <victim-list /> deadlocking ปรากฏอยู่ระหว่าง 4 กระทู้สองกับสองกับWaitType="e_waitPipeNewRow"WaitType="e_waitPipeGetRow" <resource-list> <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19"> <owner-list> <owner id="process4649868" /> </owner-list> <waiter-list> <waiter id="process40eb498" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21"> <owner-list> <owner id="process368ecf8" /> </owner-list> …

1
SQL Server Row โดยการเข้าถึงแถว
ฉันมีโครงสร้างตารางดังนั้น (แบบง่าย) Name, EMail, LastLoggedInAt ฉันมีผู้ใช้ใน SQL Server (RemoteUser) ที่ควรจะสามารถดูข้อมูลได้ (ผ่านแบบสอบถามแบบใช้เลือกข้อมูล) ที่ฟิลด์ LastLoggdInAt ไม่ว่าง ดูเหมือนว่าฉันจะทำเช่นนี้? เป็นไปได้ไหม?

1
ปรับดัชนีให้เหมาะสมบนตารางแถว 2,135,044,521
ฉันมีปัญหา I / O กับตารางขนาดใหญ่ สถิติทั่วไป ตารางมีลักษณะสำคัญดังต่อไปนี้: สภาพแวดล้อม: ฐานข้อมูล Azure SQL (ระดับชั้นเป็น P4 พรีเมียม (500 DTU)) แถว: 2,135,044,521 พาร์ติชันที่ใช้ 1,275 ดัชนีคลัสเตอร์และพาร์ติชัน แบบ นี่คือการใช้ตาราง: CREATE TABLE [data].[DemoUnitData]( [UnitID] [bigint] NOT NULL, [Timestamp] [datetime] NOT NULL, [Value1] [decimal](18, 2) NULL, [Value2] [decimal](18, 2) NULL, [Value3] [decimal](18, 2) NULL, CONSTRAINT [PK_DemoUnitData] PRIMARY KEY …

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

1
ใครใช้เธรดคนงานของฉัน SQL Server 2014 - HADR
เมื่อเร็ว ๆ นี้เรามีปัญหาเกี่ยวกับสภาพแวดล้อม HADR ของ SQL Server 2014 ซึ่งเซิร์ฟเวอร์ตัวใดตัวหนึ่งขาดเธรดของผู้ปฏิบัติงาน เราได้รับข้อความ: กลุ่มเธรดสำหรับกลุ่มความพร้อมใช้งาน AlwaysOn ไม่สามารถเริ่มเธรดผู้ปฏิบัติงานใหม่ได้เนื่องจากมีเธรดผู้ปฏิบัติงานที่พร้อมใช้งานไม่เพียงพอ ฉันแล้วเปิดคำถามอื่นเพื่อให้ได้คำสั่งที่ (ผมคิดว่า) จะช่วยให้ผมวิเคราะห์ปัญหา ( มันเป็นไปได้ที่จะเห็นการใช้งานซึ่ง SPID ซึ่งจัดตารางเวลา (ด้ายคน)? ) แม้ว่าตอนนี้ฉันจะมีแบบสอบถามเพื่อค้นหาเธรดที่ใช้ระบบนี้ แต่ฉันไม่เข้าใจว่าทำไมเซิร์ฟเวอร์นั้นถึงไม่มีเธรดของผู้ปฏิบัติงาน สภาพแวดล้อมของเรามีดังนี้: 4 Windows Server 2012 R2 SQL Server 2014 Enterprise 24 ตัวประมวลผล -> 832 เธรดผู้ทำงาน 256 GB ราม 12 กลุ่มความพร้อมใช้งาน (โดยรวม) 642 ฐานข้อมูล (โดยรวม) ดังนั้นเซิร์ฟเวอร์ที่มีปัญหามีการกำหนดค่าต่อไปนี้: 5 …

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

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