INFORMATION_SCHEMA डेटाबेस स्मृति भंडारण इंजन का उपयोग कर अस्थायी तालिकाओं से बना है।
उदाहरण: यहाँ MySQL 5.5.12 (Windows संस्करण) में तालिका INFORMATION_SCHEMA.TABLES है।
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)
उन तालिकाओं के लिए कोई भौतिक फ़ोल्डर नहीं है, यहां तक कि .frm फाइलें भी नहीं। आप इसे mysqldump नहीं कर सकते। आप इसे छोड़ नहीं सकते। आप इसमें तालिकाओं को नहीं जोड़ सकते। आप इससे टेबल नहीं गिरा सकते। तो, टेबल कहाँ हैं ???
INFORMATION_SCHEMA डेटाबेस की सभी तालिकाओं को मेमोरी स्टोरेज इंजन टेबल के रूप में सीधे मेमोरी में स्टोर किया जाता है। वे MySQL के लिए पूरी तरह से आंतरिक हैं, इसलिए .sm तंत्र mysqld में संभाला जाता है। अपने जवाब में, मैंने सबसे पहले INFORMATION_SCHEMA.TABLES का टेबल लेआउट दिखाया। यह स्मृति में एक अस्थायी तालिका है। इसे स्टोरेज इंजन प्रोटोकॉल का उपयोग करके हेरफेर किया जाता है। इस प्रकार, जब mysqld शटडाउन होता है, तो सभी information_schema तालिकाओं को गिरा दिया जाता है। जब mysqld शुरू किया जाता है, तो सभी information_schema तालिकाएँ TEMPORARY तालिकाओं के रूप में बनाई जाती हैं और mysql उदाहरण में हर तालिका के लिए मेटाडेटा के साथ फिर से खोल दी जाती हैं।
INFORMATION_SCHEMA डेटाबेस पहले MySQL 5.0 में पेश किया गया था आप अन्य भंडारण इंजन के टेबल के बारे में मेटाडेटा तक पहुंच प्रदान करना। उदाहरण के लिए, आप डेटाबेस की एक सूची प्राप्त करने के लिए शो डेटा का उपयोग कर सकते हैं। आप उनके लिए इस तरह क्वेरी भी कर सकते हैं:
SELECT schema_name database FROM information_schema.schemata;
आप डेटाबेस में तालिका के नाम दो तरीकों से प्राप्त कर सकते हैं:
use mydb
show tables;
या
SELECT table_name from information_schema.tables WHERE table_schema = 'mydb';
अपनी स्थापना के बाद से, MySQL ने प्रक्रिया सूची (MySQL 5.1 के अनुसार) के लिए INFORMATION_SCHEMA डेटाबेस का विस्तार किया है। आप वास्तव में लंबे समय तक चलने वाले प्रश्नों की तलाश में प्रक्रिया सूची को क्वेरी कर सकते हैं जो अभी भी कम से कम 10 मिनट चल रहे हैं:
SELECT * FROM information_schema.processlist WHERE time >= 600\G
आप हर विस्तृत काम करने के लिए INFORMATION_SCHEMA का उपयोग कर सकते हैं: जैसे:
विशिष्ट संग्रहण इंजनों का उपयोग करके सभी तालिकाओं की गिनती प्राप्त करें:
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;
MB में अनुशंसित MyISAM कुंजी बफर आकार प्राप्त करें
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;
GB में अनुशंसित InnoDB बफर पूल आकार प्राप्त करें
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;
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;
मेरा विश्वास करो, INFORMATION_SCHEMA के लिए अभी भी अधिक अद्भुत उपयोग हैं कि समय मुझे आगे चर्चा करने की अनुमति नहीं देता है।
कृपया ध्यान रखें कि INFORMATION_SCHEMA इतना संवेदनशील है कि यदि mysql चल रहा है और आप निम्न कार्य करते हैं:
cd /var/lib/mysql
mkdir junkfolder
और फिर mysql रन में जाएं
mysql> SHOW DATABASES;
आप डेटाबेस में से एक के रूप में जंकफ़ोल्डर देखेंगे।
यह जानना डीबीए और डेवलपर्स के लिए बहुत महत्वपूर्ण है। पुस्तक MySQL 5.0 प्रमाणन अध्ययन गाइड के अध्याय 20 (डेवलपर्स) और अध्याय 31 (डीबीए)
डेवलपर और डीबीए प्रमाणन परीक्षा की तैयारी के लिए हैं। पुस्तक प्राप्त करें, उन अध्यायों का अच्छी तरह से अध्ययन करें, और आप MySQL के INFORMATION_SCHEMA के साथ महान कार्य कर सकते हैं।
MySQL 5.5 के रूप में INFORMATION_SCHEMA डेटाबेस, अब प्लगइन्स, वैश्विक चर (स्थिति और स्थैतिक), सत्र चर (स्थिति और स्थैतिक), भंडारण इंजन की स्थिति, प्रदर्शन मैट्रिक्स इंस्ट्रूमेंटेशन, ट्रिगर मैप, घटनाओं (प्रोग्राम) और बहुत कुछ सुविधाएँ।
क्षमा करें, यह WTMI की तरह लग सकता है, लेकिन मैं INFORMATION_SCHEMA डेटाबेस का उपयोग करने का एक बड़ा प्रस्तावक हूं।