কীভাবে মাইএসকিউএলে INFORMATION_SCHEMA প্রয়োগ করা হয়?


14

তাত্ত্বিকভাবে INFORMATION_SCHEMA, এসকিউএল স্ট্যান্ডার্ডে নির্দিষ্ট করা মতামতের একটি সেট যা ব্যবহারকারীকে সিস্টেমের মেটাডেটা পরীক্ষা করতে দেয়। এটি কীভাবে মাইএসকিউএল এ প্রয়োগ করা হয়?

আমি যখন একটি নতুন ইনস্টলেশনতে সংযোগ করি তখন আমি দুটি ডাটাবেস দেখতে পাই: mysqlএবং information_schema। ডাটাবেসে SHOW CREATE TABLEবিবৃতি ব্যবহার করার পরে information_schema, দেখে মনে হচ্ছে এটি ভিউয়ের সেট হিসাবে প্রয়োগ করা হয়নি তবে পরিবর্তে বেস টেবিলগুলি দিয়ে। এই ধারণাটি কি সঠিক? অথবা ব্যবহারকারীর কাছ থেকে লুকিয়ে থাকা অন্যান্য সিস্টেম টেবিল রয়েছে?


ধন্যবাদ +1 এর জন্য অনেক :) একটি শেষ ব্যাখ্যা ation আপনি যা বলেছেন, তার পরে কি এই কথাটি ঠিক বলা যায় যে মেটাডাটা তথ্যগুলি প্রকৃত রূপান্তরিত টেবিলের সাথে সম্পর্কিত প্রকৃত .frm ফাইলগুলি থেকে সরাসরি পড়া হয়? সুতরাং সার্ভার বুট করার সময় এটি টেবিলগুলি থেকে সেই তথ্যটি পড়ে এবং INFORMATION_SCHEMA তৈরি করে। তারপরে যদি কোনও আনলাইজ ট্যাবলেট বা একটি ক্রিয়েট ইন্ডেক্স বা সাধারণভাবে কোনও ডিডিএল বিবৃতি কার্যকর করা হয়, সেই অনুসারে INFORMATION_SCHEMA আপডেট করা হবে?
আইভোট্রন

@ আইভোট্রন: এটি সঠিক! INFORMATION_SCHEMA এ এমন সারণী রয়েছে যা স্কিমা পরিবর্তনের রেকর্ড করে যেমন COLUMNS, STATISTICS, TABLE_CONSTRAINTS ইত্যাদি forth কারণ INFORMATION_SCHEMA সবই স্মৃতিতে রয়েছে, সমস্ত ডিডিএল পরিবর্তনের রেকর্ডিং প্রায় তাত্ক্ষণিক।
রোল্যান্ডোমাইএসকিউএলডিবিএ

উত্তর:


30

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 ডাটাবেসটি ব্যবহারের বড় প্রবক্তা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.