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

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

2
`ข้อผิดพลาด 1114 (HY000) ตาราง…เต็มไปด้วย Innodb_file_per_table ตั้งค่าเป็น autoextend
ฉันมีฐานข้อมูล MySQL ที่เก็บข้อมูลจำนวนมาก (100-200GB - การวัดทางวิทยาศาสตร์จำนวนมาก) ข้อมูลส่วนใหญ่ถูกเก็บไว้ในตารางSampleเดียว ตอนนี้ฉันกำลังสร้างแบบจำลองทาสของฐานข้อมูลและฉันต้องการใช้ประโยชน์จากinnodb_file_per_tableกระบวนการนี้ ดังนั้นฉันตั้งค่าinnodb_file_per_tableในการกำหนดค่าทาสของฉันและนำเข้าการถ่ายโอนข้อมูลของฐานข้อมูล ด้วยความประหลาดใจของฉันมันล้มเหลวด้วย ข้อผิดพลาด 1114 (HY000) ที่บรรทัด 5602: ตาราง 'ตัวอย่าง' เต็ม ปัจจุบันไฟล์Sample.ibdนี้มีขนาดประมาณ 93GB โดยมีพื้นที่ว่างบนพาร์ติชันมากกว่า 600GB ดังนั้นจึงไม่ใช่ปัญหาเรื่องพื้นที่ว่างบนดิสก์ ดูเหมือนว่ามันจะไปกระทบขีด จำกัด ของระบบไฟล์ทุกประเภท (ฉันใช้ ext4) ฉันจะขอบคุณสำหรับความคิดใด ๆ ที่อาจเป็นสาเหตุหรือสิ่งที่จะตรวจสอบ UPDATE:mysql Ver 14.14 Distrib 5.1.66, for debian-linux-gnu (x86_64)ฉันใช้ SELECT @@datadir; -- returns `/home/var/lib/mysql/` SHOW VARIABLES LIKE '%innodb_data_file_path%'; -- ibdata1:10M:autoextend …

6
ขนาดฐานข้อมูล SQL Server ไม่ลดลงหลังจากลบแถวจำนวนมาก
คำถามนี้ถูกโยกย้ายจาก Super User เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันไม่เก่งเรื่อง SQL แต่มีฐานข้อมูลที่จะดูแล แทบจะไม่มีที่เหลือเลยดังนั้นฉันจึงตัดสินใจลบข้อมูลทั้งหมดสำหรับปี 2008 หลังจากดำเนินการลบแบบสอบถาม (มีการทำความสะอาดประมาณ 10,000,000 แถว) และการทำความสะอาดบันทึกธุรกรรมฉันพบว่าฉัน การกระทำไม่มีผลกับขนาดฐานข้อมูล มีอะไรอีกบ้างที่ฉันต้องทำ?

3
เป็นไปได้หรือไม่ที่จะกู้คืน sql-server bak และลดขนาดไฟล์ล็อกในเวลาเดียวกัน?
เรามีไฟล์บั๊กจากลูกค้าที่เราถ่ายโอนไปยังสำนักงานนักพัฒนาของเราเพื่อตรวจสอบปัญหา ขณะนี้การสำรองข้อมูลปัจจุบันมีขนาด 25GB และฐานข้อมูลที่เรียกคืนมีขนาดใกล้เคียงกัน แต่จะต้องมีการกู้คืน 100GB ฉันเชื่อว่าเป็นเช่นนี้เพราะมีการตั้งค่าฐานข้อมูลให้มีขนาดบันทึกธุรกรรม 75GB หลังจากกู้คืนฐานข้อมูลเราสามารถลดขนาดไฟล์บันทึกได้ แต่มีวิธีการในการกู้คืนหรือไม่?

2
จะค้นหาคำสั่ง SQL ที่ทำให้ tempdb เติบโตได้อย่างไร?
tempdb ของเซิร์ฟเวอร์ (SQL Server 2008) เพิ่มขึ้นเป็น 500GB + หลายครั้งทุกเดือน เป็นไปได้ไหมที่จะทราบว่าคำสั่ง SQL ใดที่ทำให้เกิดปัญหานี้? ปัญหานี้มักจะไม่ได้เกิดจากcreate table #temp...; insert into #temp...หรือเกิดจากการselect ... into #temp...รวมที่ซับซ้อน ขนาดเริ่มต้นของบางส่วนของ tempdb แฟ้มยังมีการตั้งค่าโดยอัตโนมัติเพื่อให้ค่าที่ยิ่งใหญ่กว่าทุกครั้ง จะป้องกันได้อย่างไร? บางครั้งแผนแคชป้องกันการปรับขนาด / ลดขนาดไฟล์ วิธีการค้นหาที่หนึ่งถือ tempdb หรือไม่

2
การจัดการจำนวนผู้เช่าที่เพิ่มขึ้นในสถาปัตยกรรมฐานข้อมูลผู้เช่าหลายคน
การจัดการกับจำนวนลูกค้า (ผู้เช่า) ในเซิร์ฟเวอร์ทั่วไปที่มีฐานข้อมูลแยกกันสำหรับอินสแตนซ์ของผู้เช่าแต่ละรายของแอปพลิเคชันนั้นค่อนข้างตรงไปตรงมาและโดยปกติแล้วเป็นวิธีที่ถูกต้องในการทำเช่นนี้ ขณะนี้ฉันกำลังดูสถาปัตยกรรมสำหรับแอปพลิเคชันที่ผู้เช่าแต่ละรายมีอินสแตนซ์ฐานข้อมูลของตนเอง อย่างไรก็ตามปัญหาคือแอปพลิเคชันนี้จะมีผู้เช่าจำนวนมาก (5,000-10,000) ที่มีผู้ใช้จำนวนมากอาจจะ 2,000 สำหรับผู้เช่ารายเดียว เราจะต้องสนับสนุนการเติบโตของระบบโดยผู้เช่าหลายรายทุกสัปดาห์ นอกจากนี้ผู้เช่าทั้งหมดและผู้ใช้ของพวกเขาจะถูกนำเสนอด้วยกระบวนการเข้าสู่ระบบทั่วไป (เช่นผู้เช่าแต่ละคนไม่สามารถมี URL ของตัวเอง) ในการทำสิ่งนี้ฉันต้องการกระบวนการล็อกอินแบบรวมศูนย์และวิธีการในการเพิ่มฐานข้อมูลลงในระบบและลงทะเบียนผู้ใช้แบบไดนามิก กระบวนการลงทะเบียนและการสร้างฐานข้อมูลจะเป็นไปโดยอัตโนมัติอย่างมีประสิทธิภาพได้อย่างไร กระบวนการของการสร้างและการลงทะเบียนฐานข้อมูลผู้เช่าในระบบน่าจะทำให้เกิดปัญหาประสิทธิภาพหรือล็อค หากคุณคิดว่านี่อาจเป็นปัญหาใคร ๆ สามารถแนะนำวิธีบรรเทาได้บ้าง ฉันจะจัดการการพิสูจน์ตัวตนจากส่วนกลางในวิธีที่ข้อมูลรับรองผู้ใช้จะเชื่อมโยงกับฐานข้อมูลของผู้เช่าโดยเฉพาะได้อย่างไร แต่ผู้ใช้สามารถเข้าสู่ระบบผ่านหน้าทั่วไปได้ (เช่นทั้งหมดผ่าน URL การเข้าสู่ระบบเดียวกัน ) ผู้เช่าจะต้องสามารถเข้าสู่ระบบและการอนุญาตของตัวเอง แต่ระบบการเข้าสู่ระบบกลางจะต้องตระหนักถึงสิ่งเหล่านี้ ใครสามารถแนะนำวิธีการทำเช่นนี้? หากฉันต้องการ 'ลดขนาด' ด้วยการเพิ่มเซิร์ฟเวอร์ฐานข้อมูลหลาย ๆ คนใครสามารถแนะนำปัญหาที่ฉันอาจต้องจัดการกับการจัดการข้อมูลประจำตัวผู้ใช้ข้ามเซิร์ฟเวอร์ (การรับบทบาท ฯลฯ ) และวิธีการบางอย่างเพื่อบรรเทาปัญหาเหล่านั้น

3
ระดับการแยก "Chaos" คืออะไรและควรใช้เมื่อใด
เอกสาร ADO.NET แสดงความเป็นไปได้ของการตั้งค่าระดับธุรกรรมสำหรับธุรกรรม SQL เป็น Chaos ฟังดูไม่เป็นที่พอใจ แต่ถ้ามีอยู่ในนั้นน่าจะมีการใช้งานที่ถูกกฎหมาย SET แยกธุรกรรมระดับคำสั่งใน BOL (ah! เห็นฉันสามารถใช้ google และ BOL) ไม่มีอะไรน่าจะมีชื่อว่า "ความวุ่นวาย" และ ADO.NET จะมี 5 โหมดที่ตรงกับขึ้นอย่างให้อยู่ในระดับการบันทึกไว้ในนอกจาก "ความวุ่นวาย" ระดับความโกลาหลนี้เป็นอย่างไรหรือใคร (และทำไมถึงมีชื่อที่ไม่เป็นมิตร) อ้างอิง: ADO.NET enum

6
วิธีตรวจสอบ EXISTS อย่างมีประสิทธิภาพในหลาย ๆ คอลัมน์?
นี่เป็นปัญหาที่ฉันคิดขึ้นมาเป็นระยะและยังไม่พบทางออกที่ดีสำหรับ เผื่อว่าโครงสร้างตารางต่อไปนี้ CREATE TABLE T ( A INT PRIMARY KEY, B CHAR(1000) NULL, C CHAR(1000) NULL ) และข้อกำหนดคือการพิจารณาว่าคอลัมน์ใดคอลัมน์หนึ่งที่มีค่าว่างBหรือCมีNULLค่าใด ๆ(และถ้าเป็นเช่นนั้น) นอกจากนี้สมมติว่าตารางมีแถวนับล้านแถว (และไม่มีสถิติคอลัมน์ที่สามารถมองได้เนื่องจากฉันสนใจวิธีแก้ปัญหาทั่วไปสำหรับคิวรีประเภทนี้) ฉันสามารถคิดถึงวิธีการไม่กี่ทางที่จะเข้าใกล้สิ่งนี้ แต่ทุกคนก็มีจุดอ่อน EXISTSงบสองแยก นี่จะมีข้อดีของการอนุญาตให้แบบสอบถามหยุดสแกนเร็วที่สุดเท่าที่NULLจะพบ แต่ถ้าในความเป็นจริงไม่มีทั้งคอลัมน์ทั้งNULLสองการสแกนแบบเต็มจะส่งผลให้ แบบสอบถามรวมครั้งเดียว SELECT MAX(CASE WHEN B IS NULL THEN 1 ELSE 0 END) AS B, MAX(CASE WHEN C IS NULL THEN 1 ELSE 0 END) …

2
จะรู้ได้อย่างไรว่าเมื่อไหร่ที่ฉันมีดัชนีมากเกินไป
ใช้ Microsoft SQL Server Profiler ทุกครั้งจากนั้นแนะนำฉันด้วยดัชนีและสถิติใหม่ ๆ ที่จะสร้าง ("... 97% การปรับปรุงโดยประมาณ ... ") จากความเข้าใจของฉันทุกดัชนีเพิ่มสามารถทำให้SELECTแบบสอบถามSQL ได้เร็วขึ้น แต่ยังUPDATEหรือINSERTแบบสอบถามช้าลงเนื่องจากดัชนีจะต้องมีการปรับ สิ่งที่ฉันสงสัยคือเมื่อฉันมีดัชนี / สถิติ "มากเกินไป" อาจจะไม่มีคำตอบที่ชัดเจนเกี่ยวกับเรื่องนี้ แต่บางกฎของหัวแม่มือ

2
ฉันจะแมปความสัมพันธ์ IS-A กับฐานข้อมูลได้อย่างไร
พิจารณาสิ่งต่อไปนี้: entity User { autoincrement uid; string(20) name; int privilegeLevel; } entity DirectLoginUser { inherits User; string(20) username; string(16) passwordHash; } entity OpenIdUser { inherits User; //Whatever attributes OpenID needs... I don't know; this is hypothetical } ผู้ใช้ประเภทต่าง ๆ (ผู้ใช้ที่ล็อกอินโดยตรงและผู้ใช้ OpenID) แสดงความสัมพันธ์ IS-A กล่าวคือผู้ใช้ทั้งสองประเภทเป็นผู้ใช้ ตอนนี้มีหลายวิธีที่สิ่งนี้สามารถแสดงใน RDBMS: วิธีที่หนึ่ง CREATE TABLE Users …

7
คอลัมน์ยาวส่งผลกระทบต่อประสิทธิภาพและการใช้งานดิสก์อย่างไร
ในโครงการปัจจุบันของเรามันเกิดขึ้นบ่อยเกินไปที่เราต้องขยายคอลัมน์ด้วยตัวละครสองสามตัว จากvarchar(20)ไปvarchar(30)เรื่อย ๆ ในความเป็นจริงมันมีความสำคัญมากแค่ไหน? สิ่งนี้ดีเพียงใด ผลกระทบของการอนุญาตเพียงแค่ 100 หรือ 200 หรือแม้กระทั่ง 500 ตัวอักษรสำหรับช่อง "อินพุต" ปกติคืออะไร อีเมลสามารถมีได้เพียง 320 ตัวอักษรดังนั้นตกลง - มีข้อ จำกัด ที่ดี แต่สิ่งที่ฉันจะได้รับถ้าฉันตั้งไว้ที่ 200 เพราะฉันไม่ได้คาดหวังที่อยู่อีเมลนานกว่านั้น โดยปกติตารางของเราจะไม่มีแถวมากกว่า 100,000 แถวและมีคอลัมน์มากถึง 20 หรือ 30 คอลัมน์ เราใช้ SQL Server 2008 ตอนนี้ แต่มันน่าสนใจที่จะทราบว่า DBs ต่างกันจัดการกับปัญหานี้อย่างไร ในกรณีที่ผลกระทบต่ำมาก - อย่างที่ฉันคาดไว้มันจะช่วยให้ได้ข้อโต้แย้งที่ดี (สำรองข้อมูลด้วยการเชื่อมโยง?) เพื่อโน้มน้าวใจ DBA ของฉันว่าความหวาดระแวงระยะยาวนี้ไม่จำเป็นจริงๆ ในกรณีที่เป็นฉันอยู่ที่นี่เพื่อเรียนรู้ :-)

7
มีโอเพ่นซอร์ส / ETL ฟรีอยู่ที่นั่นไหม? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Exchange Administrators Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันใช้ Pentaho Data Integration แม้กระทั่งก่อนที่ Pentaho ซื้อและเรียกมันว่า ฉันมีรุ่นฟรีล่าสุด ฉันไปที่เว็บไซต์ของพวกเขาเมื่อเร็ว ๆ นี้เพื่อดูว่าพวกเขาได้เปิดตัวรุ่นอื่นเท่านั้นเพื่อค้นหาโอเพ่นซอร์สที่ชื่นชอบของฉัน etl ไม่เปิดมากอีกต่อไปและไม่ฟรีมาก มีใครบ้างที่รู้ทางเลือกในเครื่องมือ ETL ที่ราคาไม่แพงและใช้งานง่าย?
26 etl 

1
ดัชนี: จำนวนเต็มกับประสิทธิภาพของสตริงถ้าจำนวนโหนดเท่ากัน
ฉันกำลังพัฒนาแอพพลิเคชั่นใน Ruby on Rails ด้วยฐานข้อมูล PostgreSQL (9.4) สำหรับกรณีการใช้งานของฉันคอลัมน์ในตารางจะถูกค้นหาบ่อยมากเนื่องจากทั้งจุดของแอปพลิเคชันกำลังค้นหาแอตทริบิวต์ที่เฉพาะเจาะจงมากในแบบจำลอง ฉันกำลังตัดสินใจว่าจะใช้integerชนิดหรือเพียงแค่ใช้ประเภทสตริงทั่วไป (เช่นcharacter varying(255), ซึ่งเป็นค่าเริ่มต้นใน Rails ) สำหรับคอลัมน์ที่เป็นผมไม่แน่ใจว่าสิ่งที่แตกต่างของประสิทธิภาพการทำงานจะอยู่ในดัชนี คอลัมน์เหล่านี้เป็น enums มีขนาดคงที่สำหรับจำนวนค่าที่เป็นไปได้ที่สามารถมีได้ ส่วนใหญ่ความยาว enum ไม่เกิน 5 หมายถึงดัชนีจะมีมากขึ้นหรือน้อยคงที่ตลอดอายุการใช้งานของโปรแกรม ; ดังนั้นจำนวนเต็มและดัชนีสตริงจะเหมือนกันในจำนวนโหนด อย่างไรก็ตามสตริงที่จะทำดัชนีอาจมีความยาวประมาณ 20 ตัวอักษรซึ่งในหน่วยความจำประมาณ 5x ของจำนวนเต็ม (ถ้าจำนวนเต็ม 4 ไบต์และสตริงนั้นเป็น ASCII บริสุทธิ์ที่ 1 ไบต์ต่อตัวอักษรดังนั้นสิ่งนี้จะเก็บไว้) ฉันไม่รู้ว่าเอ็นจิ้นฐานข้อมูลทำการค้นหาดัชนีอย่างไร แต่ถ้ามันจำเป็นต้อง "สแกน" สตริงจนกว่าจะตรงกันทั้งหมดดังนั้นในสาระสำคัญซึ่งหมายความว่าการค้นหาสตริงจะช้ากว่าการค้นหาจำนวนเต็ม 5 เท่า "สแกน" จนกระทั่งตรงกับการค้นหาจำนวนเต็มจะเป็น 4 ไบต์แทน 20 นี่คือสิ่งที่ฉันจินตนาการ ค่าการค้นหาคือ …

2
mysql Lock timeout เกินกำหนดแล้ว ลองรีสตาร์ทธุรกรรม
เรากำลังเรียกใช้แอปพลิเคชั่นจาวา, รันได้ทุกเพศทุกวัย, back end คือ db คือ MySQL, เพิ่งปรับปรุงเป็น mysql 5.6 ทุกอย่างทำงานได้ดีสัปดาห์ที่ผ่านมาเริ่มได้รับข้อผิดพลาดนี้เกินล็อครอหมดเวลา ลองรีสตาร์ทธุรกรรมที่ดูเหมือนไม่หยุดสิ้นสุดไม่รู้ว่าจะทำอย่างไรกับข้อผิดพลาดนี้เพื่อหยุด ทำไมมันเกิดขึ้นทั้งหมดในทันที
26 mysql  mysql-5.6 

5
การเก็บถาวรข้อมูลเก่า
ขณะนี้เรากำลังประสบปัญหาด้านประสิทธิภาพเนื่องจากฐานข้อมูลของเรามีขนาดใหญ่เกินไป มีข้อมูลที่จัดเก็บจาก 10 ปีที่ผ่านมาและฉันไม่เห็นเหตุผลที่ข้อมูลเก่ากว่า 2 ปีจะต้องถูกเก็บไว้ในตารางเดียวกับข้อมูลใหม่ ตอนนี้เนื่องจากฉันไม่มีประสบการณ์อย่างลึกซึ้งในการจัดการฐานข้อมูลฉันกำลังมองหาวิธีที่ดีที่สุดในการเก็บถาวรข้อมูลเก่า ข้อมูล มีระเบียนประมาณ 310,000 รายการในฐานข้อมูลทั้งหมด ฐานข้อมูลต้องการ 250 GB บนฮาร์ดดิสก์ รุ่นของเซิร์ฟเวอร์คือ SQL Server 2008 ที่มีระดับความเข้ากันได้ของ SQL Server 2005 (90) แต่เรากำลังวางแผนที่จะอัพเกรดเป็น SQL Server 2012 ในไม่ช้า ฉันคิดถึงความเป็นไปได้สองอย่าง: ฐานข้อมูลใหม่ สร้างฐานข้อมูลที่คล้ายกับฐานข้อมูลบนเซิร์ฟเวอร์ที่ใช้งานจริงและแทรกข้อมูลเก่าทั้งหมดลงในฐานข้อมูลใหม่ ข้อเสีย: เนื่องจากเซิร์ฟเวอร์ที่เชื่อมโยงไม่ได้รับอนุญาตในสภาพแวดล้อมของเราจึงเป็นการยากที่จะเข้าร่วมข้อมูลเก่าหากจำเป็น ประวัติความเป็นมา สร้าง schema fe [hist] ใหม่ด้วยตารางเดียวกันกับในฐานข้อมูลการผลิต แทรกข้อมูลเก่าทั้งหมดในตารางใหม่เหล่านี้ในสคีมาใหม่ ข้อได้เปรียบ: การเข้าร่วมง่ายหากต้องการข้อมูลเก่าในอนาคต คุณเป็นหนึ่งในโซลูชันที่เหนือกว่าอีกหรือไม่ ทำไม? มีความเป็นไปได้ที่ดีกว่านี้ไหม? มีเครื่องมือที่เป็นไปได้ที่จะทำภารกิจนี้ได้อย่างง่ายดายหรือไม่? ความคิดอื่น ๆ ? …

5
วิธีการประมาณ / ทำนายขนาดข้อมูลและขนาดดัชนีของตารางใน MySQL
ฉันค้นหาสิ่งที่เป็นวิธีที่ดีที่สุดในการประเมินขนาดของตารางเพื่อที่ฉันได้ศึกษาบล็อกและฟอรัมมากมาย แต่ไม่สามารถหาคำตอบที่ถูกต้องได้ ตัวอย่างเช่นเรามีตาราง City พร้อมกับเครื่องยนต์ InnoDBสมมติว่าในอนาคต (ในอีก 1 ปีข้างหน้า) จะมี 1 ล้านระเบียนดังนั้นสิ่งที่จะเป็นขนาดข้อมูลโดยประมาณและขนาดดัชนีของตารางนั้นในช่วงเวลานี้ mysql> desc City; +-------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | Name | char(35) | NO | …
26 mysql  innodb 

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