วิธีการรับขนาดฐานข้อมูล MySQL ที่แท้จริง?


144

ฉันต้องการทราบว่าฐานข้อมูล MySQL ของฉันใช้พื้นที่เท่าใดเพื่อเลือกโฮสต์เว็บ ฉันพบคำสั่งSHOW TABLE STATUS LIKE 'table_name'ดังนั้นเมื่อฉันทำแบบสอบถามฉันได้รับสิ่งนี้:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • ตัวเลขจะถูกปัดเศษ

ดังนั้นฉันจึงมีข้อมูล 362000 หรือ 400 * 362000 = 144800000ไบต์สำหรับตารางนี้ ความยาวของดัชนีหมายถึงอะไร ขอบคุณมาก!


คุณมี 362000 + 66560 Data_Length + ความยาวของดัชนี
mandza

เป็นไปได้ที่ซ้ำกันของวิธีการรับขนาดฐานข้อมูล mysql?
Mohammad

หน้านี้จะให้คำตอบที่แน่นอนrathishkumar.in/2017/12/…
Rathish

คำตอบ:


281

จาก S. Prakash พบได้ที่ฟอรั่ม MySQL :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

หรือในบรรทัดเดียวเพื่อให้ง่ายต่อการคัดลอกวาง:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 

7
พื้นที่ว่างใน MB หมายถึงอะไร ฉันมี 100s GB ฟรี แต่รายงานน้อยกว่า 1 GB
Barth

1
@Barth ตามเอกสารหมายถึง "พื้นที่ว่างเป็นไบต์สำหรับตาราง InnoDB" แต่น่าเสียดายที่มีคำอธิบายไม่สิ่งที่หมายถึง: - \
ckujau

13
พื้นที่ว่างในหน่วยไบต์หมายความว่า - หมายความว่าจำนวนพื้นที่นั้นสามารถเรียกคืนได้หากคุณเพิ่มประสิทธิภาพของตารางหรือสร้างตารางขึ้นใหม่จากศูนย์ เมื่อฐานข้อมูลจัดเก็บข้อมูลบนดิสก์พวกเขาจะจัดสรรเป็นบล็อก การลบบันทึกมักจะทำให้บล็อกระหว่างบล็อกที่ใช้หมดและมีราคาแพงมากในการเลื่อนบล็อกอื่น ๆ ทั้งหมดเพื่อใช้พื้นที่นั้นขึ้นเพื่อให้ทำเครื่องหมายว่า "ว่าง" อาจใช้พื้นที่ว่างในภายหลังโดยเอ็นจินฐานข้อมูลเองหรือสามารถเรียกคืนโดยใช้OPTIMIZE TABLE foo(MyISAM) หรือสร้าง + วิเคราะห์ใหม่สำหรับตาราง InnoDB
razzed

92

คุณสามารถรับขนาดฐานข้อมูล Mysql ของคุณโดยเรียกใช้คำสั่งต่อไปนี้ในไคลเอนต์ Mysql

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"

30

หากคุณใช้ phpMyAdmin ข้อมูลนี้จะบอกคุณได้

เพียงไปที่ "ฐานข้อมูล" (เมนูด้านบน) แล้วคลิก "เปิดใช้งานสถิติ"

คุณจะเห็นสิ่งนี้:

ภาพหน้าจอ phpMyAdmin

สิ่งนี้อาจสูญเสียความแม่นยำเมื่อขนาดเพิ่มขึ้น แต่ควรแม่นยำเพียงพอสำหรับวัตถุประสงค์ของคุณ


ขณะนี้ฉันใช้ 000webhost มี phpMyAdmin แต่ฉันไม่พบช่องทำเครื่องหมาย "เปิดใช้งานสถิติ" มี (อาจ) แบบสอบถามสำหรับที่?
marvin

1
@marvin เป็นไปได้ที่เว็บโฮสต์จะติดตั้ง phpMyAdmin รุ่นเก่ากว่า ฉันไม่ทราบว่าคุณลักษณะนี้เปิดตัวในเวอร์ชันใด
Radu Murzea

ในแถบด้านข้างของคุณคลิกไอคอนหน้าแรกที่ด้านบนซึ่งจะนำคุณไปสู่หน้าแรก ในหน้าต่างด้านขวาคลิก 'ฐานข้อมูล' จะแสดงตารางฐานข้อมูลหนึ่งคอลัมน์ด้านล่างนี้เป็นลิงค์ที่ชื่อว่า 'Enable Statistics'
VeeK

8

ถ้าคุณต้องการที่จะหามันใน MB ทำเช่นนี้

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 

ตัวอย่าง SQL ของคำตอบนี้ดูเหมือนจะเป็นสำเนาของstackoverflow.com/a/1733523/1200542
Ariel Allon

3

โดยทั่วไปมีสองวิธี: DB แบบสอบถาม (ความยาวข้อมูล + ความยาวดัชนี) หรือตรวจสอบขนาดไฟล์ ความยาวดัชนีเกี่ยวข้องกับข้อมูลที่จัดเก็บในดัชนี

ทุกอย่างอธิบายไว้ที่นี่:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/


หน้านี้เป็นที่มาของคำถามของฉัน แต่ตามแบบสอบถามนี้ฉันมี 0.5 MB ซึ่งทำให้ฉันค่อนข้างปลอดภัย ฉันหวังว่ามันจะเป็นจริง :) ขอบคุณ!
marvin

0

ไม่มีคำตอบใดรวมถึงขนาดค่าใช้จ่ายและขนาดข้อมูลเมตาของตาราง

นี่คือการประมาณการที่แม่นยำยิ่งขึ้นของ "พื้นที่ว่างในดิสก์" ที่จัดสรรโดยฐานข้อมูล

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'

5
คุณสามารถทำอย่างละเอียด? โดยเฉพาะอย่างยิ่งค่าคงที่ของคุณ300และ150?
Melebius

ได้โปรดอธิบายเพิ่มเติมหน่อยได้ไหม?
Allan Andrade

0

SUM(Data_free) หรืออาจจะไม่ถูกต้อง innodb_file_per_tableมันขึ้นอยู่กับประวัติความเป็นมา การอภิปรายมากขึ้นจะพบที่นี่



0

ถ้าคุณใช้ MySql Workbench มันง่ายมากที่จะได้รับรายละเอียดทั้งหมดของขนาดฐานข้อมูลขนาดตารางแต่ละขนาดดัชนี ฯลฯ

  1. คลิกขวาที่สคีมา
  2. เลือกSchema ตรวจสอบตัวเลือก

    ป้อนคำอธิบายรูปภาพที่นี่

  3. มันแสดงรายละเอียดทั้งหมดของขนาด Schema

  4. เลือกแท็บตารางเพื่อดูขนาดของแต่ละตาราง

    ป้อนคำอธิบายรูปภาพที่นี่

  5. ขนาดตารางซ้อนในคอลัมน์ความยาวของข้อมูล


0

หากคุณต้องการหาขนาดของฐานข้อมูล MySQL ทั้งหมดให้เราใช้คำสั่งนี้มันจะแสดงขนาดตามหน่วยเป็นเมกะไบต์

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

หากคุณมีฐานข้อมูลขนาดใหญ่คุณสามารถใช้คำสั่งต่อไปนี้เพื่อแสดงผลลัพธ์เป็นกิกะไบต์

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

หากคุณต้องการแสดงขนาดของฐานข้อมูลเฉพาะเท่านั้นตัวอย่างเช่นYOUR_DATABASE_NAMEคุณสามารถใช้แบบสอบถามต่อไปนี้

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.