Машини за съхранение в MySQL

MySQL предоставя избор между няколко машини за съхранение (storage engines) при създаване на таблица. Различните типове таблици се управляват от различни машини за съхранение, всяка от които има собствени, специфични характеристики.

Ето няколко машини за съхранение:

Машина за съхранение MyISAM
Машина за съхранение MERGE
Машина за съхранение InnoDB
Машина за съхранение MEMORY
Машина за съхранение FEDERATED

Всички таблици, които се управляват от съръва на MySQL , имат редица общи особености. Например всяка таблица в базата данни притежава файл във формата (.frm) в директорията за бази данни. Той съхранява дефиницията за структурата на таблицата и се създава от сървъра. Таблиците имат помежду си и редица различия, които са тясно свързани с машините за съхранение, които сървърът използва за управление на съдържанието им. Всяка от тях има собствен набор от функционални характеристики. Например някои машини създават допълнителни файлове на твърдия диск за управление на данни и за съхранение на индекси, които придружават тези с разширение frm, но типовете им се различават в зависимост от съответната машина за съхранение. Последните се различават и по други особености, например по начина, по който използват заключване за контролиране на съревнованието между заявките, както и по вида на таблиците, които осигуряват: те могат да бъдат транзакционни и нетранзакционни. Споменатите свойства на машините за съхранение имат съществено значение за производителността при обработката на заявки, за контролиране на съревнованието между тях, както и за предотвратяване на т.нар. “мъртва хватка” (Тя се получава в резултат от блокиране на голям брой заявки, които не могат да продължат изпълнението си, тъй като всяка от тях изчаква приключването на останалите).

При създаване на таблица можете да изберете коя машина за съхранение да използвате. Обикновено при избора се гледа коя от тях предлага възможности, които най-добре отговарят на нуждите на конкретното приложение. Преди да направите избора си, трябва да отговорите на въпроса за какъв тип заявки възнамерявате да използвате съответната таблица. След това изберете машина за съхранение, която използва подходящо ниво на заключване. Заключването на ниво таблица, което се използва от MyISAM, работи най-ефективно при комбинации от заявки, осъществяващи интензивно извличане на данни и малко на брой актуализации. Ако желаете да обработвате комбинации от заявки, включващи множество актуализации, е далеч по-добре да използвате innoDB. За нея е характерно заключване на ниво ред и поддържане на множество версии, което осигурява отлична съгласуваност при комбинация от извличане и актуализации на данни. В този случай една заявка може да актуализира дадени редове от таблицата, докато други четат или актуализират останалите.
За да зададете изрично машина за съхранение, можете да използвате опцията engine в конструкцията create table. Дадената по-долу служи за създаване на таблица t с машина за съхранение InnoDB:

CREATE TABLE t (i int) ENGINE = InnoDB;

При липсата на engine, сървърът на MySQL ще създаде таблицата с подразбиращата се машина за съхранение. Тя се определя от стойността на системната променлива storage engine.
За да определите коя машина е използвана за дадена таблица, можете да използвате конструкцията SHOW create table или SHOW table status:
mysql> SHOW CREATE TABLE City\G
*************************** 1. row ***************************
Table: City
Create Table: CREATE TABLE 'City" (
'id' int(ll) not NULL auto_increment,
'Name' char(35) not null default
'CountryCode' char(3) NOT null default
'District' char (20) not null default V,
'Population' int(ll) not null default '0',
PRIMARY key ('id') ) ENGINE=MyISAM DEFAULT CHARSET=latinl
1 row in set (0.00 sec)

mysql> SHOW TABLE STATUS LIKE ' CountryLanguage'\G
*************************** 1 row ***************************
Name: CountryLanguage
Engine: MyiSAM
Version: 10
Row_format: Fixed
Rows: 984
A.vg row length: 39
Data length: 38376
ix data length: 167503724543
Index length: 22528
Data free: 0
auto increment: NULL
Create time: 2005-04-26 22: 15: 35
Update time: 2005-04-26 22: 15: 43
Check time: NULL
Collation: latinl Swedish ci
Checksum: NULL
Create options:
Comment:
row in set (0. 00 sec)

Таблицата informationschema tables съдържа информация също и за машините за съхранение:
mysql> SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES
-> WHERE TABLE SCHEMA = "world';

-----------------------------------------------
TABLE_NAME 1 ENGINE

City 1 MyISAM
Country 1 MylSAM
CountryLanguage MylSAM
------------------------------------------------

Въпреки че имате избор коя машина за съхранение да използвате за дадена таблица, в повечето случаи начинът на използването й след нейното създаване не зависи от машината. Действията върху всички видове таблици се изпълняват с помощта на интерфейса на SQL, a MySQL автоматично управлява детайлите, зависими от машината за съхранение, на по-ниско ниво в архитектурата си. С други думи, вашият интерфейс за контролиране на таблиците се намира в по-високия слой SQL, докато детайлите за управлението им са на по-ниския слой на машината за съхранение. Независимо от това има случаи, в които да знаете коя машина управлява дадената таблица ще ви позволи да я използвате по-ефективно. Оптимизациите, свързани с машините за съхранение, са разгледани в глава 38, „Оптимизиране на бази данни".
За да може да се използва дадена машина за съхранение, тя трябва да се компилира в сървъра и да бъде разрешена. Той използва модулна архитектура: всяка машина за съхранение представлява софтуерен модул, който се компилира в сървъра. Използването на този подход позволява включване само на някои машини в сървъра по време на конфигурирането.
Някои машини за съхранение са винаги налични. Такива са например MylSAM, merge и memory. Други са незадължителни. Поддръжката за тях може да се избере по време на конфигурирането и изграждането на MySQL. Вътрешно компилираните незадължителни машини за съхранение могат да се активират и дезактивират също и чрез стартова опция на сървъра. Например InnoDB е включена във всички двоични пакети. Ако изградите MySQL от сорс код, InnoDB се включва по подразбиране, освен ако не зададете конфигуриращата опция —without-innodb. На всеки сървър, поддръжката на включена машина за съхранение може да се дезактивира при стартиране, с помощта на опцията

—skip-innodb.

Ако желаете да намалите размера на използваната памет, избягвайте конфигурирането на ненужни машини за съхранение в сървъра. За тази цел трябва да компилирате MySQL от сорс код, вместо да използвате предварително подготвен двоичен пакет. В случай, че използвате такъв, който включва вътрешно компилирани незадължителни машини за съхранение, които не са ви необходими, можете да ги дезактивирате по време на работа.
За да видите кои машини са компилирани в сървъра и дали са достъпни по време на работа, можете да използвате конструкцията show engines.

mysql> SHOW ENGINES\G
*************************** 1 row *************************** Engine: MyiSAM Support: DEFAULT
Comment: Default engine as of MySQL 3.23 with great performance
*************************** 2. row ***************************
Engine: MEMORY Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
*************************** 3. row ***************************
Engine: HEAP Support: YES
Comment: Alias for MEMORY

Източник: MySQL 5.0(Пол Дюбоа, Стефан Хинц, Карстен Педерсън)

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Машини за съхранение в MySQL, 5.0 out of 5 based on 1 rating

Вашият коментар

Вашият email адрес няма да бъде публикуван Задължителните полета са отбелязани с *