คุณต้องการให้แน่ใจว่าการประทับวันที่และเวลาของทุกตาราง ค้นหาข้อมูลเมตาใด ๆ ในระบบสำหรับทุกตารางเรียงลำดับรายการตามวันที่และเวลาที่อัปเดตล่าสุดและแสดงผลลัพธ์ตามลำดับจากวันที่และเวลา คุณสามารถตรวจสอบขนาดของโต๊ะเพื่อดูว่าแม้แต่การเปลี่ยนแปลงขนาดเล็กน้อย
ตัวอย่างเช่นใน MySQL 5.x คุณมี information_schema.tables ซึ่งมีลักษณะดังนี้:
mysql> desc information_schema.tables;
+-----------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG | varchar(512) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| TABLE_TYPE | varchar(64) | NO | | | |
| ENGINE | varchar(64) | YES | | NULL | |
| VERSION | bigint(21) unsigned | YES | | NULL | |
| ROW_FORMAT | varchar(10) | YES | | NULL | |
| TABLE_ROWS | bigint(21) unsigned | YES | | NULL | |
| AVG_ROW_LENGTH | bigint(21) unsigned | YES | | NULL | |
| DATA_LENGTH | bigint(21) unsigned | YES | | NULL | |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES | | NULL | |
| INDEX_LENGTH | bigint(21) unsigned | YES | | NULL | |
| DATA_FREE | bigint(21) unsigned | YES | | NULL | |
| AUTO_INCREMENT | bigint(21) unsigned | YES | | NULL | |
| CREATE_TIME | datetime | YES | | NULL | |
| UPDATE_TIME | datetime | YES | | NULL | |
| CHECK_TIME | datetime | YES | | NULL | |
| TABLE_COLLATION | varchar(32) | YES | | NULL | |
| CHECKSUM | bigint(21) unsigned | YES | | NULL | |
| CREATE_OPTIONS | varchar(255) | YES | | NULL | |
| TABLE_COMMENT | varchar(2048) | NO | | | |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.01 sec)
คอลัมน์ UPDATE_TIME บันทึกครั้งล่าสุดที่ INSERT, UPDATE หรือ DELETE ถูกนำไปใช้กับตารางล่าสุด คุณสามารถเรียกใช้คิวรีแบบนี้เพื่อค้นหาเมื่อเข้าถึงฐานข้อมูลแต่ละครั้งล่าสุด:
ครั้งล่าสุดที่มีการเข้าถึงตารางในแต่ละฐานข้อมูล:
SELECT table_schema,MAX(update_time) last_accessed
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql')
AND update_time IS NOT NULL
GROUP BY table_schema;
ครั้งล่าสุดที่มีการเข้าถึงตารางในฐานข้อมูลใด ๆ :
SELECT MAX(update_time) last_accessed FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql');
10 วันล่าสุดที่มีการเข้าถึงตาราง:
SELECT * FROM
(SELECT * FROM
(SELECT last_accessed,COUNT(1) access_count
FROM (SELECT DATE(update_time) last_accessed
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql')
AND update_time IS NOT NULL) A
GROUP BY last_accessed) AA
ORDER BY last_accessed DESC) AAA
LIMIT 10;
นี่เป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ ของวิธีการรับข้อมูลเมตาจาก MySQL ฉันแน่ใจว่า Oracle และ SQL Server มีวิธีที่คล้ายกันหรือดีกว่า
เมื่อคุณแน่ใจว่ามีการเข้าถึงฐานข้อมูลบ่อยหรือไม่ค่อย (หรือสคีมา) คุณควรถ่ายโอนข้อมูล / ส่งออกฐานข้อมูลที่เก่าด้วยตนเองพร้อมกับสำเนาของสคีมาเองนอกเหนือจากข้อมูล โปรดแก้ตัวว่าคำตอบของฉันไม่ใช่ DB ผู้ไม่เชื่อเรื่องพระเจ้า SQLServer และ Oracle DBAs ควรจะตอบคำถามของพวกเขาที่นี่เช่นกันเนื่องจากแนวคิดของ schema ที่เป็นคอลเลกชันภายในอินสแตนซ์ฐานข้อมูลนั้นเบลอใน MySQL แต่ปฏิบัติตามอย่างเคร่งครัดใน SQLServer และ Oracle