INFORMATION_SCHEMA ডাটাবেসের মেমরি স্টোরেজ ইঞ্জিন ব্যবহার অস্থায়ী টেবিল তৈরি করা হয়।
উদাহরণ: মাইএসকিউএল 5.5.12 (উইন্ডোজ সংস্করণ) এর 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 ডাটাবেসের সমস্ত টেবিলগুলি মেমোরি স্টোরেজ ইঞ্জিন টেবিল হিসাবে সরাসরি মেমরিতে সংরক্ষণ করা হয়। এগুলি সম্পূর্ণ মাইএসকিউএল এর অভ্যন্তরীণ, সুতরাং .frm প্রক্রিয়াগুলি mysqld তে পরিচালিত হয়। আমার উত্তরে আমি প্রথমে INFORMATION_SCHEMA.TABLES এর সারণী বিন্যাসটি দেখিয়েছি। এটি স্মৃতিতে একটি অস্থায়ী টেবিল। এটি স্টোরেজ ইঞ্জিন প্রোটোকল ব্যবহার করে চালিত হয়। সুতরাং, যখন মাইএসকিএলডি বন্ধ হয়, সমস্ত তথ্য_সেমি টেবিলগুলি বাদ দেওয়া হয়। যখন মাইএসকিএলডিটি শুরু হয়, সমস্ত তথ্য_সেমি টেবিলগুলি টেম্পেরি টেবিল হিসাবে তৈরি করা হয় এবং মাইএসকিএল ইভেন্টে প্রতিটি টেবিলের জন্য মেটাডেটা দিয়ে পুনরায় সজ্জিত হয়।
অন্যান্য স্টোরেজ ইঞ্জিনগুলির টেবিলগুলি সম্পর্কে মেটাডেটাতে অ্যাক্সেস দেওয়ার জন্য মাইএসকিউএল 5.0 এ INFORMATION_SCHEMA ডাটাবেসটি প্রথম চালু হয়েছিল। উদাহরণস্বরূপ, আপনি ডাটাবেসের তালিকা পেতে ডেটাবেসগুলি প্রদর্শন করতে পারেন। আপনি তাদের জন্য এইভাবে জিজ্ঞাসা করতে পারেন:
SELECT schema_name database FROM information_schema.schemata;
আপনি দুটি উপায়ে একটি ডাটাবেসে টেবিলের নামগুলি পুনরুদ্ধার করতে পারেন:
use mydb
show tables;
অথবা
SELECT table_name from information_schema.tables WHERE table_schema = 'mydb';
প্রতিষ্ঠার পর থেকে, মাইএসকিউএল প্রসেসলিস্টটি (মাইএসকিউএল 5.1 হিসাবে) রাখতে তথ্য তথ্য প্রবর্তন করেছে। আপনি এখনও কমপক্ষে 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;
এমবিতে প্রস্তাবিত মাইআইএসএএম কী বাফার আকারটি পান
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;
জিবিতে প্রস্তাবিত ইনোডিবি বাফার পুল আকার পান
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;
এমবিতে স্টোরেজ ইঞ্জিন দ্বারা সমস্ত ডেটাবেসগুলির ডিস্ক ব্যবহার পান
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 এত সংবেদনশীল যে যদি মাইএসকিএল চলছে এবং আপনি নিম্নলিখিতটি করেন:
cd /var/lib/mysql
mkdir junkfolder
এবং তারপরে mysql রানে যান
mysql> SHOW DATABASES;
আপনি একটি ডেটাবেস হিসাবে জাঙ্কফোল্ডার দেখতে পাবেন।
এটি জেনে রাখা ডিবিএ এবং বিকাশকারীদের পক্ষে অত্যন্ত জরুরী। মাইএসকিউএল 5.0 শংসাপত্রের স্টাডি গাইড বইয়ের অধ্যায় 20 (বিকাশকারী) এবং অধ্যায় 31 (ডিবিএ)
বিকাশকারী এবং ডিবিএ শংসাপত্র পরীক্ষার প্রস্তুতির জন্য রয়েছে। বইটি পান, সেই অধ্যায়গুলি ভালভাবে অধ্যয়ন করুন এবং আপনি মাইএসকিউএল এর তথ্য_চেমার সাহায্যে দুর্দান্ত কাজ করতে পারেন।
মাইএসকিউএল 5.5 হিসাবে INFORMATION_SCHEMA ডাটাবেসটিতে এখন প্লাগইনস, গ্লোবাল ভেরিয়েবল (স্থিতি এবং স্ট্যাটিক), সেশন ভেরিয়েবল (স্থিতি এবং স্ট্যাটিক), স্টোরেজ ইঞ্জিনের স্থিতি, পারফরম্যান্স মেট্রিক্সের উপকরণ, ট্রিগার মানচিত্র, ইভেন্টগুলি (প্রোগ্রামযোগ্য) এবং আরও অনেক কিছু রয়েছে।
দুঃখিত, এটি ডাব্লুটিএমআই এর মতো মনে হতে পারে তবে আমি INFORMATION_SCHEMA ডাটাবেসটি ব্যবহারের বড় প্রবক্তা।