Różnice pomiędzy wersjami 5 i 8 (Spinanie 3 wersji)
⇤ ← Wersja 5 z 2016-03-11 14:43:17 →
Rozmiar: 2393
Edytor: wtps0n
Komentarz: - testowy komentarz
← Wersja 8 z 2016-03-30 19:54:56 → ⇥
Rozmiar: 3487
Edytor: wtps0n
Komentarz: s/sql/mysql/
Usunięcia zostały oznaczone w ten sposób. Dodatki zostały oznaczone w ten sposób.
Linia 15: Linia 15:
{{{#!highlight sql numbers=off {{{#!highlight mysql numbers=off
Linia 26: Linia 26:
{{{#!highlight sql numbers=off {{{#!highlight mysql numbers=off
Linia 34: Linia 34:
-- ALTER TABLE tbl_name ADD INDEX column_name (column_name);
-- OPTIMIZE TABLE tbl_name
Linia 39: Linia 41:
{{{#!highlight sql numbers=off {{{#!highlight mysql numbers=off
Linia 50: Linia 52:
{{{#!highlight sql numbers=off {{{#!highlight mysql numbers=off
Linia 55: Linia 57:
{{{#!highlight sql numbers=off {{{#!highlight mysql numbers=off
Linia 61: Linia 63:
{{{#!highlight sql numbers=off {{{#!highlight mysql numbers=off
Linia 67: Linia 69:
{{{#!highlight sql numbers=off {{{#!highlight mysql numbers=off
Linia 71: Linia 73:
== Klonowanie tabeli na podstawie istniejącej ==
{{{#!highlight mysql numbers=off
CREATE TABLE tbl1 LIKE tbl2;
INSERT INTO tbl1 SELECT * FROM tbl2 [WHERE ...];
}}}
= Odzyskiwanie backupów =
Tutaj jest największy problem. Chodzi głównie o fakt budowania indeksów, sprawdzania odwołań ("''foreign keys''") itd. Można to nieco przyspieszyć.

== Wyłączenie kontroli na czas odzyskiwania backupu ==
Należy podać takie polecenia:
{{{#!highlight mysql numbers=off
SET AUTOCOMMIT=0;
SET UNIQUE_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;
SET SESSION myisam_sort_buffer_size = 256*1024*1024;
SET SESSION read_buffer_size = 64*1024*1024;

}}}

Zaś na końcu wszystko przywrócić:
{{{#!highlight mysql numbers=off
SET AUTOCOMMIT=1;
SET UNIQUE_CHECKS=1;
SET FOREIGN_KEY_CHECKS=1;

COMMIT;
}}}

== Podział backupów: struktura oraz dane ==
(!) Podczas tworzenia backupów __warto__ oddzielnie utworzyć backup ze strukturą danych, a oddzielnie z samymi danymi.



Sztuczki i kruczki związane z mySQL

Sprawdzenie listy procesów

Pokazanie listy procesów w wersji skróconej (początki poleceń SQL):

SHOW FULL PROCESSLIST

Pokazanie listy procesów z pełnymi poleceniami SQL (czasami z bardzo długimi zapytaniami):

SHOW FULL PROCESSLIST

Ustawianie zmiennych

SET [SESSION|GLOBAL] variable=wartość

Naprawianie tabel

Zgodnie z dokumentacją mySQL należy wykonać:

SET SESSION myisam_sort_buffer_size = 256*1024*1024;
SET SESSION read_buffer_size = 64*1024*1024;
SET GLOBAL myisam_max_sort_file_size = 100*1024*1024*1024;
SET GLOBAL repair_cache.key_buffer_size = 128*1024*1024;
CACHE INDEX tbl_name IN repair_cache;
LOAD INDEX INTO CACHE tbl_name;
REPAIR TABLE tbl_name ;
-- ALTER TABLE tbl_name ADD INDEX column_name (column_name);
-- OPTIMIZE TABLE tbl_name
SET GLOBAL repair_cache.key_buffer_size = 0;

Tabele MyISAM oraz indeksy

Dotyczy szczególnie bardzo dużych tabel. Dla operacji INSERT oraz UPDATE warto zdjąć indeksy z takich tabel:

ALTER TABLE tbl_name DISABLE KEYS;

Niemniej trzeba pamiętać, że wykonywanie SELECT-ów z taką ułomną tabelą powoduje bardzo długie zapytania. Można to przywrócić (ale to trwa):

ALTER TABLE tbl_name ENABLE KEYS;

EXPLAIN czyli sprawdzenie co zrobi zapytanie

Aby sprawdzić, jak optymalne jest zapytanie można użyć polecenia EXPLAIN:

EXPLAIN SELECT * FROM `ibf_core_attachments_map` AS `core_attachments_map` WHERE location_key='forums_forums' AND id1=56489 AND id2=1260029 AND id3 IS NULL;

Pokazanie indeksów związanych z tabelą

SHOW INDEXES FROM tbl_name;

Struktura tabeli

Domyślnie pokazanie samych kolumn:

-- describe jest aliase dla show columns
DESCRIBE tbl_name

Albo w wersji jak tabela została utworzona (wraz z indeksami, kodowaniem znaków, etc.):

SHOW CREATE TABLE tbl_name

Klonowanie tabeli na podstawie istniejącej

CREATE TABLE tbl1 LIKE tbl2;
INSERT INTO tbl1 SELECT * FROM tbl2 [WHERE ...];

Odzyskiwanie backupów

Tutaj jest największy problem. Chodzi głównie o fakt budowania indeksów, sprawdzania odwołań ("foreign keys") itd. Można to nieco przyspieszyć.

Wyłączenie kontroli na czas odzyskiwania backupu

Należy podać takie polecenia:

SET AUTOCOMMIT=0;
SET UNIQUE_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;
SET SESSION myisam_sort_buffer_size = 256*1024*1024;
SET SESSION read_buffer_size = 64*1024*1024;

Zaś na końcu wszystko przywrócić:

SET AUTOCOMMIT=1;
SET UNIQUE_CHECKS=1;
SET FOREIGN_KEY_CHECKS=1;

COMMIT;

Podział backupów: struktura oraz dane

(!) Podczas tworzenia backupów warto oddzielnie utworzyć backup ze strukturą danych, a oddzielnie z samymi danymi.


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

MysqlTipsTricks (ostatnio edytowane 2018-12-18 22:17:55 przez wtps0n)