- Non-Drupal URIs and Lighttpd drupal.lua Script
- Review: MySQL Admin Cookbook
- Configuring JW FLV Player 5.x in Drupal to Stream Videos Using Amazon S3 & Cloudfront (Part III)
- Preparing Amazon S3 & CloudFront for Streaming Flash Videos from Your Drupal Site (Part II)
- Drupal Integration with Amazon Cloud Front Streaming Video Demo
- Fun With Information Schema - How Big is My Drupal Database??
- Review: MySQL Administrator's Bible
- Drush for Multisite Cron
- Portable Maatkit
- Working with TinyMCE & Syntax Highlighting
Fun With Information Schema - How Big is My Drupal Database??
Lately, I've had a few people ask me "How much data is in our database?". Sure, you can look at the file sizes of MyISAM tables and indexes and get a ballpark figure, but what if you need exact results, or are running InnoDB storage engine? That proves to be more challenging! In playing around with the information_schema, I've put together some queries to help:
Calculate Index Sizes
mysql> SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024*1024), 2), ' GB') AS 'Total Index Size' FROM information_schema.TABLES WHERE table_schema LIKE 'database';
+------------------+ |Total Index Size | +------------------+ |1.70 GB | +------------------+ 1 row in set (1.60 sec)
Calculate the Total Size of Stored Data
mysql> SELECT CONCAT(ROUND(SUM(data_length)/(1024*1024*1024), 2), ' GB') AS 'Total Data Size' FROM information_schema.TABLES WHERE table_schema LIKE 'database';
+-----------------+ | Total Data Size | +-----------------+ |3.01 GB | +-----------------+ 1 row in set (1.35 sec)
Per Table Sizes
SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', CONCAT(ROUND(table_rows/1000000,2),'M') AS 'Number of Rows', CONCAT(ROUND(data_length/(1024*1024*1024),2),'G') AS 'Data Size', CONCAT(ROUND(index_length/(1024*1024*1024),2),'G') AS 'Index Size' , CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),2),'G') AS'Total' FROM information_schema.TABLES WHERE table_schema LIKE 'database';
Just replace database with the partial name of your database you need to analyze. Yes, I know, those wonderful Maatkit tools contains mk-find which can do the same thing, but then you won't learn about the information_schema database!! It's important to also know that running the above commands on a server that's very busy can result in slowing it down even more. The information schema tables are 'virtual tables' they don't exist like regular database tables. Just be aware, and if you need to collect this information on a busy database, make a backup copy of your Drupal database and move it to a development server.
- mark's blog
- Add new comment
- 2687 reads

This work by Mark Schoonover is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.
Based on a work at blog.thetajoin.com. All comments copyright their respective owners.


Comments
Offtopic - old Blog
Hi Mark,
is there any place where one can find your old blog entries from "Mark's IT Blog" ? There were a couple of really useful entries (mysql5+drbd8 i.e.), it would be bad if they would be simply gone.
Thanks in advance,
morphium
I'm also interested...
Hi!
I was also interested on that unfinished PACS + HA series of posts... are you going to keep working on them ?
I Have Backups!!
Andor,
I do have a backup of my old site. I didn't transfer over the drbd post because it was out of date - I felt. Let me see about restoring the old site. Give me a few days.
Thanks!