web-dev-qa-db-ja.com

Amazon RDSデータベース(MySQL)の大きさを確認するにはどうすればよいですか?

RDSを使用してAmazon AWSでホストされているWebサイト用のMySQLデータベースがあります。 5GBのストレージが利用可能です。実際にその中のデータがどれだけ大きいか(したがって、5GBのクォータがどれだけ残っているか)を知るにはどうすればよいですか?

10

数回クリックするだけで、この情報をAmazonから直接取得する簡単な方法を見つけました。

  1. RDS管理ダッシュボード にログインします
  2. 「DBインスタンス」をクリックします
  3. 興味のあるインスタンスをクリックします。それはそれを拡張し、それについてもっと多くの情報を表示するはずです。
  4. 左側の「監視」タブを表示します(デフォルトで選択されているはずです)
  5. 「ストレージ」モニターがあり、使用するスペースの量を示し、使用可能なスペースのグラフを表示します。

enter image description here

4

INFORMATION_SCHEMAに対するより整理されたクエリを次に示します。

ストレージエンジンごとのサイズ

SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
(SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM
information_schema.tables WHERE table_schema NOT IN
('mysql','information_schema','performance_schema') AND
engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;

データベース別サイズ

SELECT DBName,CONCAT(LPAD(FORMAT(SDSize/POWER(1024,pw),3),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size",CONCAT(LPAD(
FORMAT(SXSize/POWER(1024,pw),3),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "Index Size",
CONCAT(LPAD(FORMAT(STSize/POWER(1024,pw),3),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Total Size" FROM
(SELECT IFNULL(DB,'All Databases') DBName,SUM(DSize) SDSize,SUM(XSize) SXSize,
SUM(TSize) STSize FROM (SELECT table_schema DB,data_length DSize,
index_length XSize,data_length+index_length TSize FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')) AAA
GROUP BY DB WITH ROLLUP) AA,(SELECT 3 pw) BB ORDER BY (SDSize+SXSize);

データベース/ストレージエンジンごとのサイズ

SELECT Statistic,DataSize "Data Size",IndexSize "Index Size",TableSize "Table Size"
FROM (SELECT IF(ISNULL(table_schema)=1,10,0) schema_score,
IF(ISNULL(engine)=1,10,0) engine_score,
IF(ISNULL(table_schema)=1,'ZZZZZZZZZZZZZZZZ',table_schema) schemaname,
IF(ISNULL(B.table_schema)+ISNULL(B.engine)=2,"Storage for All Databases",
IF(ISNULL(B.table_schema)+ISNULL(B.engine)=1,
CONCAT("Storage for ",B.table_schema),
CONCAT(B.engine," Tables for ",B.table_schema))) Statistic,
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') DataSize,CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') IndexSize,
CONCAT(LPAD(REPLACE(FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') TableSize FROM (SELECT table_schema,engine,
SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')
AND engine IS NOT NULL GROUP BY table_schema,engine WITH ROLLUP) B,
(SELECT 3 pw) A) AA ORDER BY schemaname,schema_score,engine_score;

警告

3つのクエリのそれぞれに、(SELECT 3 pw)が表示されます。 pwは、特定の単位で結果を表示するための1024の累乗を表します。

  • (SELECT 0 pw)はレポートをバイト単位で表示します
  • (SELECT 1 pw)はレポートをキロバイト単位で表示します
  • (SELECT 2 pw)はレポートをメガバイト単位で表示します
  • (SELECT 3 pw)は、レポートをギガバイトで表示します
  • (SELECT 4 pw)は、レポートをテラバイト単位で表示します
  • (SELECT 5 pw)はレポートをPetaBytesで表示します(このレポートを実行する場合はご連絡ください)

KBの書式設定が少し少ないレポートクエリを次に示します。

SELECT IFNULL(db,'Total') "Database",
datsum / power(1024,pw) "Data Size",
ndxsum / power(1024,pw) "Index Size",
totsum / power(1024,pw) "Total"
FROM (SELECT db,SUM(dat) datsum,SUM(ndx) ndxsum,SUM(dat+ndx) totsum
FROM (SELECT table_schema db,data_length dat,index_length ndx
FROM information_schema.tables WHERE engine IS NOT NULL
AND table_schema NOT IN ('information_schema','mysql')) AA
GROUP BY db WITH ROLLUP) A,(SELECT 1 pw) B;

試してみる !!!

10
RolandoMySQLDBA

show table status from mydatabsename;ここで、mydatabasenameはデータベース名です。

これは、テーブルごとのData_lengthとIndex_lengthのメトリックおよびその他のメトリックを示します。これらの列を合計し、バイト単位であることを覚えておく必要があります。したがって、kbを取得するには1024で除算し、megsを取得するには1024で除算し、ギグを取得するには1024で除算する必要があります。これは、インデックス/データベース割り当て内の空き領域も示します。

探索したい場合は、よりきめ細かく、sum()を取得できます。 http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

インデックス/データベース割り当ての残りスペースを表示します...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

...使用されているデータとインデックスサイズを表示します(合計割り当てにはそれらを追加する必要があります)

物事をもう少し詳しく分析したい場合は...

select sum(Data_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";

select sum(Index_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";

select sum(DATA_FREE) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";

select sum(Data_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema" and TABLE_NAME = "aspecifictable";

select sum(Index_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema" and TABLE_NAME = "aspecifictable";

もちろん、ここにあるようなMySQL Workbenchを使用することもできます。 http://dev.mysql.com/downloads/tools/workbench/ ただし、データベースサーバーへのポートアクセスがあることを前提としています。それでも、ダウンロードするだけの価値があるため、オフラインでも多くのことができます。ワークベンチはsum()割り当てを行わないことに注意してください。これは私には意味がありません。しかし、再び、私も最新バージョンを持っていません。

2
closetnoc