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

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

2
จำเป็นต้องเข้าใจข้อผิดพลาดในการดำเนินการแบบสอบถามแบบขนาน
วันนี้เราประสบกับประสิทธิภาพที่ลดลงในเซิร์ฟเวอร์ sql ของเรา ทำให้เวลานี้เกิดขึ้นเราบันทึก"The query processor could not start the necessary thread resources for parallel query execution"ข้อผิดพลาดหลายครั้ง การอ่านที่ฉันทำแสดงให้เห็นว่าสิ่งนี้เกี่ยวข้องกับจำนวน CPU ที่ใช้เมื่อดำเนินการคิวรีที่ซับซ้อน CPU Utilization was only at 7%แต่เมื่อตรวจสอบในระหว่างการหยุดทำงานของเรา มีอะไรอีกบ้างที่อ้างอิงเช่นนี้ที่ฉันยังไม่ได้เจอ? นี่เป็นสาเหตุของการเสื่อมประสิทธิภาพหรือไม่หรือว่าฉันกำลังไล่ต้อนปลาเฮอริ่งแดง? ค่า sp_configure ของฉันสำหรับสิ่งนี้มีดังนี้: name minimum maximum config_value run_value cost threshold for parallelism 0 32767 5 5

4
การดำเนินการสูญญากาศ / autovacuum ใช้เวลาเท่าไหร่
ฉันจัดการฐานข้อมูลขนาดใหญ่ (หลายร้อยกิ๊ก) ที่มีตารางที่มีบทบาทหลายอย่างบางคนเก็บบันทึกนับล้าน บางตารางจะได้รับการแทรกและลบจำนวนมากเท่านั้นการเพิ่มจำนวนน้อยและการปรับปรุงจำนวนมาก ฐานข้อมูลทำงานบน PostgreSQL 8.4 บนระบบ Debian 6.0 amd64 พร้อม RAM ขนาด 16 กิกะไบต์ บางครั้งคำถามนั้นเป็นกระบวนการอัตโนมัติในตารางใช้เวลานานมาก (วัน) ในการดำเนินการให้เสร็จสมบูรณ์ ฉันต้องการที่จะบอกอย่างคร่าวๆว่าต้องใช้เวลานานเท่าไรในการสั่งการสูญญากาศโดยเฉพาะเพื่อให้สามารถตัดสินใจได้ว่าจะยกเลิกหรือไม่ นอกจากนี้หากมีตัวบ่งชี้ความคืบหน้าสำหรับการดำเนินการสูญญากาศ postgres มันจะมีประโยชน์จริงๆ แก้ไข: ฉันไม่ได้มองหาวิธีแก้ปัญหากระสุน เพียงแค่คำแนะนำคร่าวๆเกี่ยวกับจำนวนของ tuples ที่ตายแล้วหรือไบต์ I / O ที่จำเป็นก็เพียงพอที่จะตัดสินใจได้ มันน่ารำคาญจริง ๆ ที่ไม่มีเงื่อนงำเมื่อVACUUMจะเสร็จสิ้นอะไรก็ตาม ฉันเคยเห็นว่าpg_catalog.pg_stat_all_tablesมีคอลัมน์สำหรับจำนวน tuples ที่ตายแล้ว ดังนั้นจึงเป็นไปได้ที่จะมีการประมาณค่าแม้ว่ามันจะหมายถึงสิ่งที่มีANALYZEอยู่ในตารางก่อนหน้า บนมืออื่น ๆ , autovacuum_vacuum_thresholdและautovacuum_vacuum_scale_factorการตั้งค่าเพียงอย่างเดียวพิสูจน์ว่า postgres ตัวเองรู้ว่าบางสิ่งบางอย่างเกี่ยวกับจำนวนของการเปลี่ยนแปลงบนโต๊ะและอาจทำให้มันอยู่ในมือของ DBA เกินไป ฉันไม่แน่ใจว่าแบบสอบถามใดที่จะเรียกใช้เพราะเมื่อฉันเรียกใช้VACUUM VERBOSEฉันเห็นว่าไม่เพียง แต่ตารางเท่านั้น …

2
ฉันควรเพิ่ม max_connections ใน AWS RDS t1-micro สำหรับ MySQL หรือไม่
ฉันมี AWS RDS t1-micro ที่ใช้งาน MySQL 5.5 มันทำให้ฉันมีข้อผิดพลาดในการเชื่อมต่อมากเกินไป ฉันตรวจสอบแล้วและอนุญาตการเชื่อมต่อสูงสุด 34 รายการพร้อมกัน สิ่งที่ฉันได้อ่านคือฉันสามารถเพิ่มค่าสูงสุดนี้ได้โดยการสร้างกลุ่มพารามิเตอร์ DB สำหรับอินสแตนซ์ Micro นี้ ความสับสนของฉันคือ ฉันควรเพิ่มค่าการเชื่อมต่อสูงสุดสำหรับไมโครในกลุ่มพารามิเตอร์ DB หรือไม่ หรือฉันควรพิจารณาอัปเกรดเป็นระดับ RDS ถัดไปซึ่งให้การเชื่อมต่อสูงสุด (125)? ฉันควรเพิ่ม max_connections บน micro RDS เป็น 125 เทียบกับการอัพเกรดเป็นอินสแตนซ์ขนาดเล็ก RDS หรือไม่? เหตุใดและปัจจัยใดที่ฉันควรตัดสินใจ ขอบคุณ

4
ทางออกที่ดีที่สุดในการแก้ไขการออกแบบฐานข้อมูลด้วย GUID เป็นคีย์หลัก
ฉันหลังจากการยืนยันแนวคิดนี้เพื่อแก้ไขฐานข้อมูลที่มีประสิทธิภาพไม่ดีหรือมีข้อเสนอแนะที่ดีกว่าถ้ามีใครมี เปิดรับข้อเสนอแนะที่ดีกว่าเสมอ ฉันมีฐานข้อมูลขนาดใหญ่มาก (มากกว่า 20 ล้านบันทึกการเติบโตประมาณ 1/2 ล้านต่อวัน) ซึ่งใช้ GUID เป็น PK การดูแลในส่วนของฉัน แต่ PK นั้นทำคลัสเตอร์บนเซิร์ฟเวอร์ SQL และทำให้เกิดปัญหาประสิทธิภาพการทำงาน เหตุผลสำหรับ guid - ฐานข้อมูลนี้มีการซิงโครไนซ์บางส่วนกับฐานข้อมูลอื่น 150 ฐานดังนั้น PK จึงจำเป็นต้องไม่ซ้ำกัน การซิงโครไนซ์ไม่ได้รับการจัดการโดย SQL Server แต่มีกระบวนการแบบกำหนดเองที่สร้างขึ้นซึ่งเก็บข้อมูลให้ตรงกับความต้องการของระบบ - ทั้งหมดขึ้นอยู่กับ GUID นั้น ฐานข้อมูลระยะไกล 150 ตัวแต่ละตัวไม่เก็บข้อมูลแบบเต็มตามที่เก็บไว้ในฐานข้อมูล SQL ส่วนกลาง พวกเขาจัดเก็บชุดย่อยของข้อมูลที่พวกเขาต้องการจริงและข้อมูลที่ต้องการนั้นไม่ซ้ำกัน (10 จาก 150 ฐานข้อมูลอาจมีบางระเบียนเดียวกันจากฐานข้อมูลไซต์อื่นเช่นพวกเขาแบ่งปัน) นอกจากนี้ - ข้อมูลถูกสร้างขึ้นจริงที่ไซต์ระยะไกล - ไม่ใช่ที่จุดศูนย์กลาง - …

1
วิธีตรวจสอบการเรียงของตารางใน PostgreSQL
ฉันต้องการสคริปต์ตรวจสอบการเปรียบเทียบที่ใช้ในตารางของฉันใน PostgreSQL แต่ googling สำหรับPostgresql detect collationทำงานได้ไม่ดีสำหรับฉันและเอกสารไม่ได้ทำให้การค้นหานี้ง่าย มีใครบอกฉันได้ไหมว่าฉันจะตรวจสอบเรื่องนี้อย่างไร

2
SQL Server มีวิธีการรับรอบบันทึกธุรกรรมเมื่ออัปเดตคอลัมน์เป็น int
ฉันมีตาราง SQL Server 2005 ชื่อBRITTNEY_SPEARS_MARRIAGESและมีคอลัมน์ต่อไปนี้: MarrigeId tinyint, HusbandName varchar(500), MarrigeLength int ตอนนี้ฉันมีอีกโต๊ะ BRITTNEY_SPEARS_MARRIAGE_STORIES StoryId int, MarriageId tinyint, StoryText nvarchar(max) ปัญหาคือเราต้องการที่จะปรับปรุงMarrigeIdคอลัมน์ไปยังจากint tinyintเราแค่รู้สึกว่า Brittney กำลังจะมีการแต่งงานมากมายก่อนที่ทุกอย่างจะถูกพูดและทำ ตอนนี้BRITTNEY_SPEARS_MARRIAGE_STORIESตารางมีแถวอยู่ 18 ล้านแถว (เดี๋ยวก่อนผู้หญิงมีปัญหา) ดังนั้นเมื่อเราไปอัปเดตบันทึกธุรกรรมจะเต็มและกล่อง SQL Server ของเราก็ตาย เราจะแก้ไขสิ่งนี้ได้อย่างไร จะมีการพูดว่า "สวัสดี SQL Server ฉันจะอัปเดตคอลัมน์นี้และทำให้ใหญ่ขึ้นเชื่อฉันใน SQL Server นี้กรุณาอย่ากรอกบันทึกการทำธุรกรรมในขณะที่คุณพยายามตรวจสอบทุกอย่าง?"

4
การออกแบบฐานข้อมูล: วิธีจัดการกับปัญหา "เก็บถาวร"?
ฉันค่อนข้างมั่นใจว่ามีแอปพลิเคชั่นมากมายแอปพลิเคชันที่สำคัญธนาคารและอื่น ๆ ทำสิ่งนี้เป็นประจำทุกวัน แนวคิดเบื้องหลังทั้งหมดคือ: แถวทั้งหมดต้องมีประวัติ ลิงก์ทั้งหมดจะต้องเชื่อมโยงกัน มันควรจะง่ายต่อการร้องขอเพื่อรับคอลัมน์ "ปัจจุบัน" ลูกค้าที่ซื้อสิ่งที่ล้าสมัยควรยังคงเห็นสิ่งที่พวกเขาซื้อแม้ว่าผลิตภัณฑ์นี้ไม่ได้เป็นส่วนหนึ่งของแคตตาล็อกอีกต่อไป และอื่น ๆ นี่คือสิ่งที่ฉันต้องการจะทำและฉันจะอธิบายปัญหาที่ฉันเผชิญ ตารางทั้งหมดของฉันจะมีคอลัมน์เหล่านี้: id id_origin date of creation start date of validity start end of validity และนี่คือแนวคิดสำหรับการดำเนินการ CRUD: สร้าง = แทรกแถวใหม่ด้วยid_origin= id, date of creation= ตอนนี้start date of validity= ตอนนี้end date of validity= null (= หมายความว่าเป็นระเบียนที่ใช้งานในปัจจุบัน) ปรับปรุง = read = …

2
เข้าร่วม SQL Server / สถานที่ประมวลผลคำสั่ง
หลังจากอ่านแบบสอบถาม SQL ช้าไม่แน่ใจว่าจะเพิ่มประสิทธิภาพมันทำให้ฉันคิดเกี่ยวกับประสิทธิภาพการทำงานทั่วไปของแบบสอบถาม แน่นอนว่าเราต้องการผลลัพธ์ของตารางแรก (เมื่อมีการรวมตารางอื่น ๆ ) ให้เล็กที่สุดเท่าที่จะเป็นไปได้ก่อนที่จะเข้าร่วม (Inner joins สำหรับคำถามนี้) เพื่อให้การสืบค้นของเราเร็วขึ้นเล็กน้อย ตัวอย่างควร: SELECT * FROM ( SELECT * FROM table1 WHERE col = @val ) t INNER JOIN table2 ON col = col2 จะดีกว่า / เร็วกว่า: SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col …

4
ฉันจะรู้ได้อย่างไรว่ามีกระบวนการหรือฟังก์ชั่นอยู่ในฐานข้อมูล mysql หรือไม่?
ฉันจะรู้ได้อย่างไรว่ามีกระบวนการหรือฟังก์ชั่นอยู่ในฐานข้อมูล MySQL หรือไม่? และมีตัวเลือกการค้นพบใด ๆ ชอบshow procedures;(เช่นชอบshow tables;)

2
การตรวจสอบข้อ จำกัด การตรวจสอบคืออะไร
ฉันมี T-SQL ที่สร้างขึ้นอัตโนมัติซึ่งน่าจะถูกต้อง แต่ฉันไม่เข้าใจจริงๆ ALTER TABLE [dbo].[MyTable] WITH CHECK CHECK CONSTRAINT [My_FORIEGN_KEY]; ฉันรู้ว่าข้อ จำกัด ของคีย์ต่างประเทศคืออะไร แต่คือCHECK CHECKอะไร

4
ฉันจะสร้าง CROSS JOIN ที่หมุนได้ได้อย่างไรโดยที่ไม่ทราบนิยามของตารางที่ได้
เมื่อกำหนดสองตารางที่มีจำนวนแถวที่ไม่ได้กำหนดด้วยชื่อและค่าฉันจะแสดงCROSS JOINฟังก์ชันที่มีเครื่องหมายทับค่าของพวกมันได้อย่างไร CREATE TEMP TABLE foo AS SELECT x::text AS name, x::int FROM generate_series(1,10) AS t(x); CREATE TEMP TABLE bar AS SELECT x::text AS name, x::int FROM generate_series(1,5) AS t(x); ตัวอย่างเช่นถ้าฟังก์ชันนั้นเป็นการคูณฉันจะสร้างตาราง (การคูณ) เช่นเดียวกับด้านล่างได้อย่างไร (arg1,arg2,result)แถวเหล่านั้นทั้งหมดสามารถสร้างขึ้นได้ด้วย SELECT foo.name AS arg1, bar.name AS arg2, foo.x*bar.x AS result FROM foo CROSS JOIN bar; ดังนั้นนี่เป็นเพียงคำถามของงานนำเสนอฉันต้องการสิ่งนี้เพื่อทำงานกับชื่อที่กำหนดเอง …

2
ช่องว่างที่ไม่คาดคิดในคอลัมน์ IDENTITY
ฉันพยายามสร้างหมายเลขใบสั่งซื้อที่ไม่ซ้ำกันซึ่งเริ่มต้นที่ 1 และเพิ่มขึ้นทีละ 1 ฉันมีตาราง PONumber ที่สร้างโดยใช้สคริปต์นี้: CREATE TABLE [dbo].[PONumbers] ( [PONumberPK] [int] IDENTITY(1,1) NOT NULL, [NewPONo] [bit] NOT NULL, [DateInserted] [datetime] NOT NULL DEFAULT GETDATE(), CONSTRAINT [PONumbersPK] PRIMARY KEY CLUSTERED ([PONumberPK] ASC) ); และขั้นตอนการจัดเก็บที่สร้างขึ้นโดยใช้สคริปต์นี้: CREATE PROCEDURE [dbo].[GetPONumber] AS BEGIN SET NOCOUNT ON; INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1); SELECT SCOPE_IDENTITY() AS …

4
ดึง PK และ FK ทั้งหมด
ฉันมีฐานข้อมูลขนาดใหญ่ที่ฉันต้องการแยกคีย์หลักและคีย์ต่างประเทศทั้งหมดจากแต่ละตาราง ฉันมี pgAdmin III มีวิธีการทำเช่นนี้โดยอัตโนมัติและไม่ข้ามแต่ละตารางด้วยตนเอง?

2
อะไรคือความแตกต่างระหว่างหน้าเว็บแบบ leaf และแบบ non-leaf?
ฉันได้รับการเรียกใช้รายงานการใช้งานดัชนีบางส่วนและฉันพยายามที่จะได้รับความหมายของใบและNon-ใบ ดูเหมือนว่าจะมีทั้งส่วนแทรกและส่วนที่ไม่ใช่ใบไม้การอัปเดตการลบการรวมหน้าและการจัดสรรหน้า ฉันไม่รู้จริงๆว่ามันหมายถึงอะไรหรือถ้ามีคนหนึ่งดีกว่าคนอื่น หากใครบางคนสามารถให้คำจำกัดความที่เรียบง่ายของแต่ละคนและอธิบายว่าทำไมเรื่อง Leaf หรือ Non-leaf ก็จะได้รับการชื่นชม!

2
ฉันควรใช้สตริงบิต PostgreSQL หรือไม่
ฉันได้เรียนรู้เกี่ยวกับbit stringประเภทข้อมูลเมื่อเร็ว ๆ นี้และฉันค่อนข้างอยากรู้อยากเห็น: ที่ด้านล่างของหน้าเอกสารนี้มีประโยค: ... บวก 5 หรือ 8 ไบต์ค่าใช้จ่ายขึ้นอยู่กับความยาวของสตริง มีการจัดการสตริงบิตในภาษาอื่นเช่น PHP, Java, C #, C ++ และอื่น ๆ อย่างไรผ่านไดรเวอร์เช่น Npgsql, ODBC เป็นต้น สำหรับคำถามที่ 1 การใช้ smallint หรือ bigint จะช่วยเพิ่มประสิทธิภาพในการจัดเก็บได้มากขึ้นและอาจช่วยเพิ่มประสิทธิภาพในการทำงานเนื่องจากจำนวนเต็มได้รับการสนับสนุนทุกที่ ภาษาการเขียนโปรแกรมส่วนใหญ่จัดการการทำงานของบิตกับจำนวนเต็มอย่างง่ายดาย หากเป็นเช่นนั้นจุดประสงค์ของการแนะนำชนิดข้อมูลบิตสตริงคืออะไร เป็นเพียงกรณีที่ต้องการรูปแบบบิตจำนวนมากหรือไม่ การทำดัชนีฟิลด์บิตอาจ? ฉันอยากรู้มากขึ้นเกี่ยวกับวิธีการสร้างดัชนีฟิลด์ใน PostgreSQL สำหรับ # 2 ฉันสับสนมากกว่าอยากรู้อยากเห็น ตัวอย่างเช่นถ้าฉันเก็บมาสก์บิตวันต่อสัปดาห์ไว้ในฟิลด์บิต (7) หนึ่งบิตต่อวันโดยมีบิตต่ำสุดแทนวันจันทร์ จากนั้นฉันจะค้นหาค่าใน PHP และ C ++ ฉันจะได้อะไร …
18 postgresql 

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