มีวิธีที่รวดเร็วในการกำหนดพื้นที่ดิสก์ที่ตาราง MySQL เฉพาะกำลังดำเนินการหรือไม่? ตารางอาจเป็น MyISAM หรือ Innodb
มีวิธีที่รวดเร็วในการกำหนดพื้นที่ดิสก์ที่ตาราง MySQL เฉพาะกำลังดำเนินการหรือไม่? ตารางอาจเป็น MyISAM หรือ Innodb
คำตอบ:
สำหรับตารางmydb.mytable
รันสิ่งนี้สำหรับ:
SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
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';
SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
นี่คือข้อความค้นหาทั่วไปที่หน่วยแสดงผลสูงสุดคือ 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;
ให้มันลอง !!!
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
มีชื่อและขนาดเรียงลำดับตามขนาด
บิตของ 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;
หวังว่าจะเป็นประโยชน์กับใครบางคน!
สิ่งนี้จะไม่ถูกต้องสำหรับตาราง InnoDB ขนาดของดิสก์นั้นใหญ่กว่าขนาดที่รายงานผ่านการสืบค้น
โปรดดูลิงค์นี้จาก Percona สำหรับข้อมูลเพิ่มเติม
https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/
ใน linux ที่ติดตั้ง mysql เป็นค่าเริ่มต้น:
[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>
ขึ้นอยู่กับตำแหน่ง mysql db ของ NIXCRAFT
จากคำตอบของ RolandMySQLDBA ฉันคิดว่าเราสามารถใช้ข้างต้นเพื่อรับขนาดของแต่ละ schema ในตาราง:
SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb
FROM information_schema.tables GROUP BY table_schema;
ชอบมันมาก!
คุณอาจจะดูขนาดของไฟล์ ...
แต่ละตารางจะถูกเก็บไว้ในสองไฟล์ที่แยกต่างหากภายในโฟลเดอร์ที่มีชื่อว่าอะไรก็ตามที่คุณเรียกว่าฐานข้อมูลของคุณ โฟลเดอร์เหล่านี้ถูกเก็บไว้ในไดเรกทอรีข้อมูล mysql
จากนั้นคุณสามารถทำ 'du -sh. *' เพื่อรับขนาดของตารางบนดิสก์
นำมาจากฉันจะตรวจสอบจำนวนพื้นที่ดิสก์ที่ฐานข้อมูลของฉันใช้อยู่ได้อย่างไร
คุณสามารถตรวจสอบขนาดตาราง 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';
ฉันจะใช้เครื่องมือ ' 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