คุณจะทราบได้อย่างไรว่ามีพื้นที่บนดิสก์ในตาราง MySQL จำนวนเท่าใด


145

มีวิธีที่รวดเร็วในการกำหนดพื้นที่ดิสก์ที่ตาราง MySQL เฉพาะกำลังดำเนินการหรือไม่? ตารางอาจเป็น MyISAM หรือ Innodb


ใน PHPMyAdmin คุณสามารถดูการใช้พื้นที่ได้ง่ายๆเพียงคลิกที่ตาราง
AR

คำตอบสำหรับคำถามนี้ช่วยให้ฉันได้คำตอบ การค้นหาอย่างละเอียดหาเครื่องมือที่จะช่วยฉันได้โดยไม่ต้องดำเนินการทุกแบบสอบถามเดียวกันเพื่อให้ได้ข้อมูลที่ทำให้ผมผ่านไปMONyog , MySQL Enterprise การตรวจสอบ , Percona เครื่องมือ พวกเขาทั้งหมดให้รายละเอียดเกี่ยวกับข้อมูลดิสก์ แต่ในที่สุดก็เลือกใช้ MONyog สำหรับแผนภูมิกราฟิกที่ดีขึ้นและ GUI ที่ใช้งานง่าย
แม็ตธิว

คำตอบ:


285

สำหรับตารางmydb.mytableรันสิ่งนี้สำหรับ:

ไบต์

SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

KILOBYTES

SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

เมกะไบต์

SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

GIGABYTES

SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

GENERIC

นี่คือข้อความค้นหาทั่วไปที่หน่วยแสดงผลสูงสุดคือ TB (TeraBytes)

SELECT 
    CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
    CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
    CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
    SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
    FROM 
    (
        SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
        FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
        FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
        FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
        FROM information_schema.tables
        WHERE table_schema='mydb'
        AND table_name='mytable'
    ) AA
) A,(SELECT 'B KBMBGBTB' units) B;

ให้มันลอง !!!


6
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;เพื่อรับรายการตารางทั้งหมดที่mydbมีชื่อและขนาดเรียงลำดับตามขนาด
kqw

1
ผนวก "DESC" ในส่วนคำสั่งซื้อ ORDER BY เพื่อดูตารางที่ใช้พื้นที่ดิสก์มากขึ้นก่อน ;)
mvsagar

เพื่อความแม่นยำคุณอาจต้องการเรียกหน่วย ki bi bytes (KiB), me biไบต์ (MiB) และ gi biไบต์ (GiB) เมื่อใช้คำนำหน้าไบนารี (การคูณด้วยกำลัง 2) หรือคุณอาจต้องการใช้ส่วนนำหน้าทศนิยม (การคูณด้วยกำลัง 1,000) จากนั้นเรียกหน่วย ki lo bytes (KB), me ga bytes (MB) และ gi ga bytes (GB) ดูเพิ่มเติม: en.wikipedia.org/wiki/Binary_prefix
MártonTamás

ไม่มีใครรู้วิธีการทำเช่นเดียวกันใน MSSQL?
Ivan Yurchenko

@RolandoMySQLDBA คุณช่วยแนะนำเกี่ยวกับstackoverflow.com/questions/47976837/
davidb

15

บิตของ SQL อย่างรวดเร็วเพื่อรับ 20 ตารางที่ใหญ่ที่สุดเป็น MB

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;

หวังว่าจะเป็นประโยชน์กับใครบางคน!


12

สิ่งนี้จะไม่ถูกต้องสำหรับตาราง InnoDB ขนาดของดิสก์นั้นใหญ่กว่าขนาดที่รายงานผ่านการสืบค้น

โปรดดูลิงค์นี้จาก Percona สำหรับข้อมูลเพิ่มเติม

https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/


2

ใน linux ที่ติดตั้ง mysql เป็นค่าเริ่มต้น:

[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>

ขึ้นอยู่กับตำแหน่ง mysql db ของ NIXCRAFT


คำถามคือถามถึงวิธีการวัดพื้นที่นำขึ้นโดยตารางโดยเฉพาะอย่างยิ่ง
Flimm

@ShariqueAbdullah สิ่งนี้จะใช้ได้ถ้าคุณใช้ innodb_file_per_table ซึ่งไม่ใช่ค่าเริ่มต้น แต่ฉันคิดว่ามันเป็นเรื่องธรรมดาและ / หรือคำแนะนำ (ใครบางคนสามารถพิสูจน์ฉันผิดเกี่ยวกับเรื่องนี้
Seaux

@ Seaux อาจเป็นไปได้ แต่ฉันไม่พบว่ามันถูกใช้ในการตั้งค่าเซิร์ฟเวอร์ที่แนะนำที่ฉันเคยผ่านมา ดังนั้นคุณอาจจะถูก แต่เนื่องจากไม่ใช่ค่าเริ่มต้นเขาอาจไม่พบมัน นอกจากนี้ฉันคิดว่าฟังก์ชั่น innodb ค่อนข้างแตกต่างจาก MyISAM ดังนั้นแม้ว่าคุณจะมีขนาดไฟล์มันอาจไม่แม่นยำเท่าที่ควรในกรณีของ MyISAM แต่คุณพูดถูกที่อาจเป็นทางออกหนึ่ง ฉันชอบใช้คำสั่ง MySQL เพื่อรับข้อมูลนี้มากกว่าการวัดขนาดไฟล์
Sharique Abdullah

2

จากคำตอบของ RolandMySQLDBA ฉันคิดว่าเราสามารถใช้ข้างต้นเพื่อรับขนาดของแต่ละ schema ในตาราง:

SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
    FROM information_schema.tables GROUP BY table_schema;

ชอบมันมาก!


0

คุณอาจจะดูขนาดของไฟล์ ...

แต่ละตารางจะถูกเก็บไว้ในสองไฟล์ที่แยกต่างหากภายในโฟลเดอร์ที่มีชื่อว่าอะไรก็ตามที่คุณเรียกว่าฐานข้อมูลของคุณ โฟลเดอร์เหล่านี้ถูกเก็บไว้ในไดเรกทอรีข้อมูล mysql

จากนั้นคุณสามารถทำ 'du -sh. *' เพื่อรับขนาดของตารางบนดิสก์


ใช้งานได้กับฐานข้อมูล MyISAM เท่านั้น OP ขอวิธีการแก้ปัญหาที่ใช้งานได้กับ InnoDB เช่นกัน
Bgs

0

นำมาจากฉันจะตรวจสอบจำนวนพื้นที่ดิสก์ที่ฐานข้อมูลของฉันใช้อยู่ได้อย่างไร

คุณสามารถตรวจสอบขนาดตาราง MySQL ได้โดยดูที่phpMyAdminแผงควบคุมของคุณโดยคลิกที่ชื่อฐานข้อมูลในกรอบด้านซ้ายและอ่านขนาดของตารางในกรอบด้านขวา

แบบสอบถามด้านล่างนี้จะช่วยให้ได้รับข้อมูลเดียวกันใน bytes

select SUM(data_length) + SUM(index_length) as total_size 
from information_schema.tables 
where table_schema = 'db_name' 
and table_name='table_name';

สิ่งนี้ถือว่า phpMyAdmin ติดตั้งอยู่
thebigjc

-1

ฉันจะใช้เครื่องมือ ' mysqldiskusage ' ดังต่อไปนี้

$ mysqldiskusage --server=user:password@localhost mydbname
# Source on localhost: ... connected.

# Database totals:
+------------+----------------+
| db_name    |         total  |
+------------+----------------+
| mydbaname  | 5,403,033,600  |
+------------+----------------+

Total database disk usage = 5,403,033,600 bytes or 5.03 GB

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