Cơ sở dữ liệu Information_SCHema được tạo thành từ các bảng tạm thời bằng cách sử dụng công cụ lưu trữ MEMORY.
Ví dụ: Dưới đây là bảng Information_SCHema.TABLES trong MySQL 5.5.12 (Phiên bản Windows)
mysql> show create table information_schema.tables\G
*************************** 1. row ***************************
Table: TABLES
Create Table: CREATE TEMPORARY TABLE `TABLES` (
`TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
`TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
`TABLE_TYPE` varchar(64) NOT NULL DEFAULT '',
`ENGINE` varchar(64) DEFAULT NULL,
`VERSION` bigint(21) unsigned DEFAULT NULL,
`ROW_FORMAT` varchar(10) DEFAULT NULL,
`TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
`AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,
`DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
`MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
`INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
`DATA_FREE` bigint(21) unsigned DEFAULT NULL,
`AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
`UPDATE_TIME` datetime DEFAULT NULL,
`CHECK_TIME` datetime DEFAULT NULL,
`TABLE_COLLATION` varchar(32) DEFAULT NULL,
`CHECKSUM` bigint(21) unsigned DEFAULT NULL,
`CREATE_OPTIONS` varchar(255) DEFAULT NULL,
`TABLE_COMMENT` varchar(2048) NOT NULL DEFAULT ''
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Không có thư mục vật lý cho các bảng đó, thậm chí không có tệp .frm. Bạn không thể mysqldump nó. Bạn không thể thả nó. Bạn không thể thêm bảng vào nó. Bạn không thể thả bảng từ nó. Vậy, những cái bàn ở đâu ???
Tất cả các bảng trong cơ sở dữ liệu Information_SCHema được lưu trữ trực tiếp trong bộ nhớ dưới dạng bảng công cụ lưu trữ MEMOR. Chúng hoàn toàn bên trong MySQL, vì vậy các cơ chế .frm được xử lý trong mysqld. Trong câu trả lời của tôi, lần đầu tiên tôi chỉ ra cách bố trí bảng của Information_SCHema.TABLES. Đó là một bảng tạm thời trong bộ nhớ. Nó được chế tác bằng cách sử dụng các giao thức công cụ lưu trữ. Do đó, khi mysqld bị tắt, tất cả các bảng information_schema sẽ bị hủy. Khi mysqld được khởi động, tất cả các bảng information_schema được tạo dưới dạng bảng TẠM THỜI và được sao lưu bằng siêu dữ liệu cho mỗi bảng trong thể hiện mysql.
Cơ sở dữ liệu Information_SCHema được giới thiệu lần đầu tiên trong MySQL 5.0 để cung cấp cho bạn quyền truy cập vào siêu dữ liệu về các bảng của các công cụ lưu trữ khác. Ví dụ: bạn có thể thực hiện HIỂN THỊ cơ sở dữ liệu để có danh sách cơ sở dữ liệu. Bạn cũng có thể truy vấn chúng như thế này:
SELECT schema_name database FROM information_schema.schemata;
Bạn có thể truy xuất tên bảng trong cơ sở dữ liệu theo hai cách:
use mydb
show tables;
hoặc là
SELECT table_name from information_schema.tables WHERE table_schema = 'mydb';
Kể từ khi thành lập, MySQL đã mở rộng cơ sở dữ liệu Information_SCHema để có danh sách quy trình (kể từ MySQL 5.1). Bạn thực sự có thể truy vấn danh sách quy trình tìm kiếm các truy vấn chạy dài vẫn đang chạy ít nhất 10 phút:
SELECT * FROM information_schema.processlist WHERE time >= 600\G
Bạn có thể sử dụng THÔNG TIN_SCHema để thực hiện mọi việc phức tạp: chẳng hạn như:
Nhận số lượng của tất cả các bảng bằng cách sử dụng các công cụ lưu trữ cụ thể:
SELECT COUNT(1) TableCount,IFNULL(engine,'Total') StorageEngine
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql')
AND engine IS NOT NULL
GROUP BY engine WITH ROLLUP;
Nhận Kích thước bộ đệm chính MyISAM được đề xuất tính bằng MB
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),
SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_key_buffer_size
FROM (SELECT SUM(index_length) KBS FROM information_schema.tables WHERE
engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A,
(SELECT 2 pw) B;
Nhận Kích thước nhóm bộ đệm InnoDB được đề xuất theo GB
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),
SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,(SELECT 3 pw) B;
Nhận sử dụng đĩa của tất cả các cơ sở dữ liệu bằng công cụ lưu trữ trong MB
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 2 pw) A) AA ORDER BY schemaname,schema_score,engine_score;
Tin tôi đi, vẫn còn nhiều cách sử dụng tuyệt vời hơn cho Information_SCHema mà thời gian không cho phép tôi thảo luận thêm.
Xin lưu ý rằng Information_SCHema nhạy cảm đến mức nếu mysql đang chạy và bạn làm như sau:
cd /var/lib/mysql
mkdir junkfolder
và sau đó đi vào mysql chạy
mysql> SHOW DATABASES;
Bạn sẽ thấy rác thải là một trong những cơ sở dữ liệu.
Biết nó rất quan trọng đối với các DBA và Nhà phát triển. Chương 20 (nhà phát triển) và Chương 31 (DBA) của cuốn sách Hướng dẫn nghiên cứu chứng chỉ MySQL 5.0
có mặt để chuẩn bị cho các kỳ thi chứng chỉ dành cho nhà phát triển và DBA. Nhận sách, nghiên cứu kỹ các chương đó và bạn có thể làm những điều tuyệt vời với THÔNG TIN_SCHema của MySQL.
Cơ sở dữ liệu Information_SCHema kể từ MySQL 5.5, hiện có các plugin, biến toàn cục (trạng thái và tĩnh), biến phiên (trạng thái và tĩnh), trạng thái công cụ lưu trữ, thiết bị đo lường hiệu suất, bản đồ kích hoạt, sự kiện (có thể lập trình) và nhiều hơn nữa.
Xin lỗi, điều này có vẻ giống như WTMI nhưng tôi là một người ủng hộ lớn cho việc sử dụng cơ sở dữ liệu Information_SCHema.