MySQL-де сұрауларды профильдеу. «Сервер журналдары» дегеніміз не, Mysql серверінің журналдарын, сұрау журналдарын қалай көруге болады

MySQL сұрау профилін жасау дерекқорға негізделген қолданбалардың жалпы өнімділігін талдаудың пайдалы әдісі болып табылады. Орташа және үлкен қолданбаларды әзірлеу кезінде әдетте үлкен кодтық базаға таралатын жүздеген сұраулар болады және дерекқор секундына көптеген сұрауларды өңдейді. Сұрау профилінсіз, орын мен пайда болу себептерін анықтау өте қиын болады кедергілерқолданбалар. Бұл оқулық MySQL кіріктірілген құралдары арқылы кейбір пайдалы сұрауларды профильдеу әдістерін сипаттайды.

MySQL баяу сұрау журналы

MySQL баяу сұрау журналы (немесе баяу сұрау журналы) MySQL баяу және ықтимал проблемалық сұрауларды жіберетін журнал.

Бұл мүмкіндік MySQL-мен бірге келеді, бірақ әдепкі бойынша өшірілген. MySQL қолданбаның өнімділік талаптарына негізделген сұрауды профильдеуге мүмкіндік беретін арнайы айнымалы мәндердің көмегімен осы журналға қандай сұрауларды қосу керектігін анықтайды. Әдетте, өңдеуге ұзағырақ уақыт кететін сұраулар және қате индекстері бар сұраулар осы журналға енгізіледі.

Профильдеу айнымалылар

MySQL баяу сұрау журналын конфигурациялауға арналған негізгі сервер айнымалылары:

slow_query_log жаһандық
slow_query_log_file жаһандық
long_query_time жаһандық/сеанс
log_queries_not_using_indexes жаһандық
min_examed_row_limit жаһандық/сеанс

slow_query_log – баяу сұрау журналын қосу немесе өшіру үшін логикалық айнымалы.

slow_query_log_file – сұрау журналының файлының абсолютті жолы. Файл каталогы mysqld пайдаланушысына тиесілі және тиісті оқу және жазу рұқсаттары болуы керек. MySQL демоны MySQL ретінде іске қосылуы мүмкін, бірақ сенімді болу үшін Linux терминалында пәрменді іске қосыңыз:

ps -ef | grep bin/mysqld | кесу -d" " -f1

Шығару ағымдағы пайдаланушыны және MySQLD пайдаланушысын көрсетеді.

cd /var/log
mkdir mysql
chmod 755 mysql
chown mysql: mysql mysql

  • long_query_time – сұрау ұзақтығын тексеру үшін секундпен берілген уақыт. Мән 5 болса, өңдеуге 5 секундтан астам уақыт кететін барлық сұраулар журналға жазылады.
  • log_queries_not_using_indexes – индекстерді пайдаланбайтын сұраулардың журналға жазылу керектігін анықтайтын логикалық мән. Талдау кезінде мұндай сұраулар маңызды.
  • min_examed_row_limit – талданатын жолдардың ең аз санын анықтайды. Мәні 1000 болса, 1000-нан аз жолды талдайтын барлық сұраулар еленбейді.

MySQL серверінің айнымалы мәндерін MySQL конфигурация файлында орнатуға немесе динамикалық түрде пайдалануға болады пайдаланушы интерфейсінемесе MySQL пәрмен жолы. Егер айнымалы мәндер конфигурация файлында орнатылса, олар сервер қайта іске қосылғанда сақталады, бірақ оларды белсендіру үшін серверді қайта жүктеу керек. MySQL конфигурация файлы әдетте /etc/my.cnf немесе /etc/mysql/my.cnf ішінде орналасқан. Конфигурация файлын табу үшін енгізіңіз (сізге іздеуді басқа түбірлік каталогтарға кеңейту қажет болуы мүмкін):

/etc -аты my.cnf табыңыз
/usr -атауы my.cnf табыңыз

Конфигурация файлын тапқаннан кейін бөлімге қажетті айнымалы мәндерді қосыңыз:


….
баяу сұрау журналы = 1
slow-query-log-file = /var/log/mysql/localhost-slow.log
ұзақ_сұрау_уақыты = 1
индекстерді пайдаланбайтын журнал сұраулары

Өзгерістер күшіне енуі үшін серверді қайта іске қосу керек. Өзгерістерді дереу белсендіру қажет болса, айнымалы мәндерді динамикалық түрде орнатыңыз:

mysql> SET GLOBAL slow_query_log = "ҚОСУ";
mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log";
mysql> SET GLOBAL log_queries_not_using_indexes = "ҚОСУ";
mysql> SET SESSION long_query_time = 1;
mysql> СЕССИЯ ОРНАТУ min_examed_row_limit = 100;

Айнымалы мәндерді тексеру үшін:

mysql> "slow_query_log" СИЯҚТЫ Жаһандық айнымалыларды КӨРСЕТУ;
mysql> "ұзын_сұрау_уақыты" СИЯҚТЫ СЕССИЯ АЙНАЛЫМДАРЫН КӨРСЕТУ;

MySQL айнымалы мәндерін динамикалық өзгертудің кемшіліктерінің бірі сервер қайта жүктелген кезде айнымалы мәндердің жоғалуы болып табылады. Сондықтан сақтауды қажет ететін барлық маңызды айнымалылар файлға қосылуы керек.

Профильдеу сұрауын жасау

Енді сіз баяу сұрау журналының параметрлерімен таныссыз. Профильдеу үшін сұрау деректерін жасап көріңіз.

Ескерту: Мұнда келтірілген мысал баяу сұрау журналдары конфигурацияланбай іске қосылған MySQL данасында іске қосылды. Бұл сынақ сұраулары арқылы іске қосуға болады GUIнемесе пәрмен жолы MySQL.

Баяу сұраулар журналын бақылау кезінде екі терминал терезесін ашу пайдалы: жіберу үшін бір қосылым MySQL мәлімдемелері, ал екіншісі сұрау журналын көруге арналған.

SUPER ADMIN артықшылықтары бар пайдаланушы ретінде консольді пайдаланып MySQL серверіне кіріңіз. Бастау үшін сынақ дерекқоры мен кестені жасаңыз, оған жалған деректерді қосыңыз және сұрауларды баяу тіркеуді қосыңыз.

Ескерту: Ең дұрысы, бұл мысалды MySQL-ті пайдаланатын басқа қолданбаларсыз ортада сұраулар журналын шатастыруды болдырмас үшін іске қосқан дұрыс.

$> mysql -u -p
mysql> ДЕРЕКТЕР ҚОРЫН ЖАСАУ profile_sampling;

mysql> profile_sampling USE;


mysql> CREATE TABLE пайдаланушылары (id TINYINT PRIMARY KEY AUTO_INCREMENT, аты VARCHAR(255));


mysql> ПАЙДАЛАНУШЫЛАРҒА ЕНГІЗУ (аты) VALUES («Уолтер»), («Скайлер»), («Джесси»), («Хенк»), («Уолтер кіші»), («Мари»), («Саул»). "),("Густаво"),("Гектор"),("Майк");


mysql> SET GLOBAL slow_query_log = 1;


mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log";


mysql> SET GLOBAL log_queries_not_using_indexes = 1;


mysql> SET long_query_time = 10;


mysql> SET min_examined_row_limit = 0;

Енді сізде сынақ деректер базасы және кейбір деректері бар кесте бар. Баяу сұрау журналы қосылған. Біз сұрауды өңдеу уақытын әдейі жоғары етіп орнаттық және жолдар санын тексеруді өшірдік. Журналды көру үшін мынаны енгізіңіз:

cd /var/log/mysql
ls -l

Әзірге қалтада баяу сұраулар журналы болмауы керек, өйткені осы сәтөтініштер болған жоқ. Егер мұндай журнал бұрыннан бар болса, бұл сіз баяу сұрау журналына қолдауды қосқандықтан, дерекқор баяу сұрауларға кезіккенін білдіреді. Бұл осы мысалдың нәтижелерін бұрмалауы мүмкін. MySQL қойындысына оралып, келесі әрекеттерді орындаңыз:

mysql> profile_sampling USE;
mysql> ТАҢДАУ * пайдаланушылардан WHERE id = 1;

Орындалған сұраныс деректерді жай ғана шығарып алады және кестеден бірінші кілттің индексін пайдаланады. Бұл сұрау жылдам болды және индексті пайдаланды, сондықтан ол баяу сұрау журналында жазылмайды. Каталогқа оралыңыз және ешқандай сұрау журналы жасалмағанына көз жеткізіңіз. Енді MySQL терезесіне оралыңыз және іске қосыңыз:

mysql>

Бұл сұрау индексті пайдаланбайды. Енді осындай нәрсе /var/log/mysql/localhost-slow.log журналында пайда болуы керек:

# Уақыты: 140322 13:54:58

profile_sempling пайдалану;
SET уақыт белгісі=1395521698;

Тағы бір мысал. Талдау және сұрауды келесідей жіберу үшін жолдардың ең аз санын көбейтіңіз:

mysql> SET min_examined_row_limit = 100;
mysql> ТАҢДАУ * FROM пайдаланушылардан WHERE name = "Walter";

Деректер журналға қосылмайды, себебі сұрау кезінде 100-ден аз жол талданған.

Ескерту: Деректер журналға қосылмаған болса, бірнеше факторларды тексеру керек. Алдымен журнал жасалған каталогтың рұқсаттарын тексеріңіз. Ол mysqld пайдаланушысына/тобына тиесілі және chmod 755 артықшылықтары болуы керек. Одан кейін серверде параметрлеріңізді қайта анықтайтын басқа баяу сұрау параметрлерінің бар-жоғын тексеру керек. Конфигурация файлынан барлық баяу сұрау айнымалыларын жою және серверді қайта жүктеу үшін әдепкі мәндерді қалпына келтіріңіз. Сондай-ақ, жаһандық айнымалы мәндерді әдепкі мәндеріне динамикалық түрде орнатуға болады. Динамикалық өзгерістер енгізіп жатсаңыз, параметрлерді жаңарту үшін жүйеден шығып, MySQL жүйесіне қайта кіріңіз.

Сұраныс профилін жасау деректерін талдау

Келесі деректерді қарастырыңыз:

# Уақыты: 140322 13:54:58
#User@Host: root@localhost
# Сұрау_уақыты: 0,000303 Құлыптау_уақыты: 0,000090_Жіберілген_жолдар: 1_қаралған_жолдар: 10
profile_sempling пайдалану;
SET уақыт белгісі=1395521698;
ТАҢДАУ * FROM пайдаланушылардан WHERE name = «Джесси»;

Бұл жазба көрсетеді:

  • Сұраныстың орындалу уақыты
  • Кім жіберді
  • Өтінішті өңдеуге қанша уақыт кетті?
  • Ұзындығы
  • Қанша жол қайтарылды
  • Қанша жол талданды

Бұл пайдалы, себебі айнымалы мәндерде көрсетілген өнімділік талаптарын бұзатын кез келген сұрау журналда аяқталады. Бұл әзірлеушіге немесе әкімшіге жұмыс істемейтін сұрауларды жылдам бақылауға мүмкіндік береді. Бұған қоса, сұрау профилін жасау деректері қолданбаңыздың нашар жұмыс істеуіне қандай жағдайлар себеп болатынын анықтауға көмектеседі.

Mysqldumpslow пайдалану

Орташа деректер ағынын қамтамасыз ету үшін профильдеу дерекқорға негізделген қолданбаларға қосылуы мүмкін.

Журнал өлшемі ұлғайған сайын барлық деректерді талдау қиынға соғады және проблемалық сұраулар онда оңай жоғалып кетуі мүмкін. MySQL mysqldumpslow деп аталатын құралды ұсынады, ол баяу сұраулар журналын бөлу арқылы бұл мәселені болдырмауға көмектеседі. Екілік MySQL-ге (Linux жүйесінде) байланысты, сондықтан сіз жай ғана пәрменді іске қоса аласыз:

mysqldumpslow -t 5 -s /var/log/mysql/localhost-slow.log

Пәрмен оның шығысын теңшеу үшін әртүрлі параметрлерді қабылдай алады. Жоғарыдағы мысал орташа сұрау уақыты бойынша сұрыпталған ең жақсы 5 сұрауды көрсетеді. Мұндай жолдар оқуға ыңғайлы және сұрау бойынша да топтастырылған.

Сан: 2 Уақыт=68,34с (136с) Құлыптау=0,00с (0с) Жолдар=39892974,5 (79785949), root@localhost
PL.pl_title, P.page_title ТАҢДАУ
П бетінен
INNER JOIN бет сілтемелері PL
ON PL.pl_namespace = P.page_namespace
ҚАЙДА P.page_namespace = N

Шығару келесі деректерді көрсетеді:

  • Санау: сұрау қанша рет тіркелді.
  • Уақыт: орташа және жалпы сұрау уақыты (жақшада).
  • Құлыптау: үстелді құлыптау уақыты.
  • Жолдар: қайтарылған жолдар саны.

Пәрмен сандық және жол мәндерін қоспайды, сондықтан әртүрлі WHERE шарттары бар бірдей сұраулар бірдей деп есептеледі. Mysqldumpslow құралы баяу сұраулар журналын үнемі қарап шығу қажеттілігін болдырмайды, оның орнына жүйелі түрде орындауға мүмкіндік береді. автоматты тексерулер. Mysqldumpslow пәрмен опциялары күрделі өрнектерді іске қосуға мүмкіндік береді.

Сұраныс бөлу

Есте сақтау керек тағы бір профильдеу құралы күрделі сұрауларды бөлу құралы болып табылады. Ол баяу сұраулар журналында проблемалық сұрауларды анықтауға және оны MySQL жүйесінде іске қосуға мүмкіндік береді. Алдымен профильді қосу керек, содан кейін сұрауды іске қосыңыз:

mysql> SET SESSION профилін орнату = 1;
mysql> profile_sampling USE;
mysql> ТАҢДАУ * пайдаланушылардан WHERE name = «Джесси»;
mysql> ПРОФИЛЬДЕРДІ КӨРСЕТУ;

Профильдеу қосылғаннан кейін, ПРОФИЛЬДЕРДІ КӨРСЕТУ Query_ID параметрін SQL өрнегімен байланыстыратын кестені көрсетеді. Орындалған сұрауға сәйкес келетін Сұраныс_идентификаторын тауып, келесі сұрауды іске қосыңыз (# дегенді Сұраныс_идентификаторымен ауыстырыңыз):

mysql> INFORMATION_SCHEMA.PROFILING FROM * ТАҢДАУ ЖЕРДЕ QUERY_ID=#;

Пәрмен кестені қайтарады:

SEQ МЕМЛЕКЕТТІК ҰЗАҚТЫҚ
1 бастау 0.000046
2 рұқсаттарды тексеру 0.000005
3 кестелерді ашу 0.000036

STATE — сұрауды орындау процесінің қадамы, ал DURATION — бұл қадамды секундтарда аяқтауға кететін уақыт. Өте емес пайдалы құрал, бірақ ол сұрауды орындаудың қай бөлігі ең кешіктіруді тудыратынын анықтауға көмектеседі.

ЕскертуЕскертпе: Бұл құралды өндірістік ортада қолдануға болмайды.

Баяу сұрау журналының өнімділігі

Баяу сұрау журналының өнімділікке қалай әсер ететінін анықтау ғана қалады. Жалпы, өндіріс ортасында баяу сұрау журналдарын іске қосу қауіпсіз; Орталық процессорға да, енгізу/шығаруға да әсер етпеу керек. Дегенмен, журналдың тым үлкен болмайтынына көз жеткізу үшін журнал өлшемін бақылау стратегиясы болуы керек файлдық жүйе. Сонымен қатар, өндіріс ортасында баяу сұрау журналын іске қосқан кезде long_query_time мәнін 1 немесе одан жоғары етіп орнату керек.

Қорытынды

Баяу сұрау журналы проблемалық сұрауларды анықтауға және жалпы сұрау өнімділігін бағалауға көмектеседі. Бұл ретте әзірлеуші ​​қолданбаның қалай жұмыс істейтіні туралы толық түсінік ала алады MySQL сұраулары. Mysqldumpslow құралы баяу сұрау журналдарын басқаруға және оларды әзірлеу процесіне оңай қосуға мүмкіндік береді. Проблемалық сұрауларды анықтау арқылы өнімділікті жақсарту үшін сұрауды өңдеуді оңтайландыруға болады.

Тегтер:

Оқиғалар журналдары жүйе күйін анықтауға және қателерді анықтауға арналған бірінші және қарапайым құрал болып табылады. MySQL-де төрт негізгі журнал бар:

  • Қате журналы— сервер жұмыс істеп тұрған кезде жиналатын стандартты қателер журналы (соның ішінде іске қосу және тоқтату);
  • Екілік журнал— көшіру және сақтық көшірме жасау үшін қажетті мәліметтер қорын өзгерту командаларының журналы;
  • Жалпы сұрау журналы— негізгі сұраныс журналы;
  • Баяу сұрау журналы— баяу сұраулар журналы.

Қате журналы

Бұл журналда сервер жұмыс істеп тұрған кезде орын алған барлық қателер, соның ішінде маңызды қателер, сонымен қатар серверді өшіру, серверді іске қосу және ескертулер бар. Жүйе ақаулығы орын алған жағдайда осы жерден бастау керек. Әдепкі бойынша, барлық қателер консольге (stderr) шығарылады, сонымен қатар қателерді жүйе журналына (Debian жүйесінде әдепкі) немесе бөлек журнал файлына тіркеуге болады:

Log_error=/var/log/mysql/mysql_error.log

# Қателер mysql_error.log сайтына жазылады

Қателерді жылдам анықтау үшін бұл журналды қосулы ұстауды ұсынамыз. Осы немесе басқа қатенің нені білдіретінін түсіну үшін MySQL-де қателер утилитасы бар:

Shell> қате 13 64 ОЖ қате коды 13: Рұқсат берілмеді ОЖ қате коды 64: Құрылғы желіде емес

# Қате кодтарының мағынасын түсіндіреді

Екілік (бинарлы) журнал

Барлық дерекқорды өзгерту пәрмендері екілік журналға жазылады, олар үшін пайдалы репликацияжәне қалпына келтіру.

Ол келесідей қосылады:

Log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 5 max_binlog_size = 500 миллион

# Орналасқан жерін, өмір сүру уақытын және көрсетеді максималды өлшемфайл

Есіңізде болсын, егер сіз жүйені масштабтауға және ақауларға төзімділікті жүзеге асырмасаңыз, онда екілік журналды қоспағаныңыз жөн. Бұл ресурсты қажет етеді және жүйе өнімділігін төмендетеді.

Сұраныс журналы

Бұл журнал барлық қабылданған SQL сұрауларын және клиент қосылымдары туралы ақпаратты қамтиды. Бұл индексті талдау және оңтайландыру, сондай-ақ қате сұрауларды анықтау үшін пайдалы болуы мүмкін:

General_log_file = /var/log/mysql/mysql.log жалпы_журнал = 1

# Журналды қамтиды және файлдың орнын көрсетеді

MySQL сервері жұмыс істеп тұрған кезде де оны қосуға/өшіруге болады:

SET GLOBAL general_log = "ҚОСУ"; SET GLOBAL general_log = "OFF";

# Оны пайдалану үшін серверді қайта іске қосудың қажеті жоқ

Баяу сұрау журналы

Журнал баяу, яғни тиімсіз сұрауларды анықтау үшін пайдалы. Толығырақ бөлімде оқыңыз Бұл мақала.

Журналдарды қарау

Debian (Ubuntu) жүйесінде журналдарды көру үшін сізге келесі әрекеттерді орындау қажет:

# Қате журналы -f /var/log/syslog #Сұраулар журналы -f /var/log/mysql/mysql.log # Баяу сұрауларды тіркеу tail -f /var/log/mysql/mysql-slow.log

# Егер журналдар бөлек көрсетілмесе, олар /var/lib/mysql ішінде орналасқан

Журналдың айналуы

Серверде аз орын алатындай журнал файлдарын сығуды (мұрағаттауды, айналдыруды) ұмытпаңыз. Мұны істеу үшін қызметтік бағдарламаны пайдаланыңыз логротацияконфигурация файлын өңдеу арқылы /etc/logrotate.d/mysql-server:

# - Мен барлығын бір блокқа салып, ортақ скрипттерді қостым, осылайша MySQL # flush-logs"d"ді бір рет алады. # Әйтпесе екілік журналдар күн сайын автоматты түрде n есе артады. # - Қате журналы ескірген, хабарлар қазір жүйе журналына өтеді./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log(күнделікті айналдыру 7 missingok жасау 640 mysql adm қысу sharedscripts postrotate test -x /usr/bin/mysqladmin || шығу 0 # Егер бұл орындалмаса, debian.conf файлын тексеріңіз! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" егер [ -z "`$MYADMIN ping 2>/dev/null`" ]; содан кейін # Шынында да mysqld жоқ немесе debian-sys-maint пайдаланушысы жоқ па? # Егер бұл орын алса және қате болмаса, қате туралы хабарлаңыз. #if ps cax | grep -q mysqld; содан кейін if killall -q -s0 -umysql mysqld; содан кейін 1 fiдан шығыңыз, басқа $MYADMIN flush-logs fi endscript )

# Қажет журналдарды қысады және мұрағаттайды, файлдарды тазартады

DDL журналы

MySQL сонымен қатар деректер тілі журналын жүргізеді. Ол DROP_TABLE және ALTER_TABLE сияқты әрекеттерден деректерді жинайды. Журнал осындай операциялар кезінде орын алған сәтсіздіктерді қалпына келтіру үшін пайдаланылады. DDL журналы екілік файл және оны пайдаланушы оқуға арналмаған, сондықтан оны өзгертпеңіз немесе жоймаңыз.

Ең бастысы

Әрқашан қателер журналын қосыңыз, қолданбаның дерекқорға қосылуын тексеру үшін сұрау журналын пайдаланыңыз, сұраулар мен жұмысты тексеріңіз. Баяу сұраулар журналы MySQL өнімділігін оңтайландыру үшін пайдалы.

Mysql-де сұрауларды профильдеуқолданбаңыздың өнімділігін бағалау үшін пайдаланылады. Орташа және үлкен қолданбаларды әзірлеу кезінде секунд сайын орындалатын кодыңыз бойынша таратылған жүздеген сұраулармен жұмыс істеуге тура келеді. Сұрау профилін жасау әдістерінсіз қолданба өнімділігінің нашарлауына не себеп болатынын анықтау өте қиын болуы мүмкін.

MySQL жүйесінде баяу сұрау журналы дегеніміз не?

MySQL Slow Query Log - баяу және ықтимал проблемалық сұрауларды белгілейтін журнал. MySQL бұл функцияны әдепкі бойынша қолдайды, бірақ ол өшірілген. Белгілі бір сервер айнымалы мәндерін орнату арқылы біз қандай сұрауларды қызықтыратынымызды анықтай аламыз. Көбінесе бізге толтыру үшін белгілі бір уақытты қажет ететін сұраулар немесе индекстерді дұрыс өңдемейтін сұраулар қажет.

Профильдеу айнымалыларын орнату

Сұраулар журналын орнатуға арналған негізгі айнымалылар:

Slow_query_log G slow_query_log_file G long_query_time G / S log_queries_using_indexes G min_examined_row_limit G / S

Түсініктеме: G - ғаламдық айнымалылар, S - жүйелік айнымалылар

  • slow_query_log - логикалық мән, соның ішінде журнал
  • slow_query_log_file - журнал файлына абсолютті жол. Каталогтың иесі пайдаланушы болуы керек mysqld, және каталогта дұрыс оқу және жазу рұқсаттары болуы керек. Көбінесе MySQL демоны пайдаланушы ретінде жұмыс істейді mysql.

Тексеру үшін келесі пәрмендерді орындаңыз:

Ps-ef | grep bin/mysqld | кесу -d" " -f1

Пәрменнің шығысы ағымдағы пайдаланушының және mysqld пайдаланушысының атын береді. /var/log/mysql каталогын орнату мысалы:

CD /var/log sudo mkdir mysql sudo chmod 755 mysql sudo chown mysql:mysql mysql

  • long_query_time - сұрау ұзақтығын тексеру үшін секундпен берілген уақыт. Мысалы, 5 мәні бар, 5 секундтан асатын әрбір сұрау журналға жазылады.
  • log_queries_not_using_indexes - логикалық мән, индекстерді пайдаланбайтын сұрауларды сақтауға мүмкіндік береді. Мұндай сұраулар талдауда өте маңызды.
  • min_examed_row_limit - талданатын деректер жолдарының саны үшін ең аз мәнді көрсетеді. 1000 мәні мәндердің 1000 жолынан аз қайтаратын сұрауларды елемейді.

Бұл айнымалы мәндерді MySQL конфигурация файлында MySQL GUI немесе MySQL пәрмен жолы арқылы динамикалық түрде орнатуға болады. Егер айнымалы мәндер конфигурация файлында көрсетілсе, сервер келесі жолы іске қосылғанда оларды орнатады. Әдетте бұл файл /etc, /usr, /etc/my.cnf немесе /etc/mysql/my.cnf мекенжайларында орналасады. Мұнда конфигурация файлын іздеу пәрмендері берілген (кейде іздеуді басқа түбірлік каталогтарға кеңейту керек):

/etc -аты my.cnf табу /usr -my.cnf атауы

Файлды тапқан кезде, бөлімге қажетті айнымалы мәндерді қосыңыз:

; ... slow-query-log = 1 slow-query-log-file = /var/log/mysql/localhost-slow.log long_query_time = 1 log-query-not-using-indexes ; мұнда ешқандай мағына қажет емес

Өзгерістер MySQL келесі жолы іске қосылғанда ғана күшіне енеді; параметрлерді динамикалық түрде өзгерту қажет болса, айнымалы мәндерді орнатудың басқа әдістерін пайдаланыңыз:

Mysql> SET GLOBAL slow_query_log = "ҚОСУ"; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = "ҚОСУ"; mysql> SET SESSION long_query_time = 1; mysql> СЕССИЯ ОРНАТУ min_examed_row_limit = 100;

Айнымалы мәндерді келесідей тексеруге болады:

Mysql> "slow_query_log" СИЯҚТЫ Жаһандық айнымалыларды КӨРСЕТУ; mysql> "ұзын_сұрау_уақыты" СИЯҚТЫ СЕССИЯ АЙНАЛЫМДАРЫН КӨРСЕТУ;

Динамикалық орнатудың негізгі кемшілігі - жүйе іске қосылған кезде мәндер жоғалады. MySQL конфигурациясында маңызды параметрлерді көрсету ұсынылады.

Ескертпе: Параметрлерді динамикалық орнатуға арналған синтаксис арқылы SET командасыжәне конфигурация файлын пайдалану сәл өзгеше, мысалы slow_query_log / slow-query-log . Синтаксистің толық сипаттамасын ДҚБЖ ресми құжаттамасынан табасыз. Опция-Файл пішімі конфигурация файлы үшін пайдаланылады, Жүйе айнымалы атауы - мәндерді динамикалық түрде орнату кезінде айнымалы атаулары.

Сұраныс профилін жасау үшін деректерді жасау

Біз профильді орнатудың негізгі тармақтарын қарастырдық, енді бізді қызықтыратын сұрауларды жасаймыз. Бұл мысал жұмыс істеп тұрған MySQL серверінде ешқандай алдын ала журнал параметрлері жоқ пайдаланылды. Үлгі сұрауларды MySQL GUI және ДҚБЖ пәрмен құралдары арқылы іске қосуға болады. Баяу сұраулар журналын бақылау кезінде қосылымы бар екі терезені ашу әдеттегідей: біреуі сұрауларды орындау үшін, екіншісі журналды қарау үшін.

$> mysql -u -p mysql> ДЕРЕКТЕР ҚОРЫН ЖАСАУ profile_sampling; mysql> profile_sampling USE; mysql> CREATE TABLE пайдаланушылары (id TINYINT PRIMARY KEY AUTO_INCREMENT, аты VARCHAR(255)); mysql> ПАЙДАЛАНУШЫЛАРҒА ЕНГІЗУ (аты) VALUES («Уолтер»), («Скайлер»), («Джесси»), («Хенк»), («Уолтер кіші»), («Мари»), («Саул»). "),("Густаво"),("Гектор"),("Майк"); mysql> SET GLOBAL slow_query_log = 1; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = 1; mysql> SET long_query_time = 10; mysql> SET min_examined_row_limit = 0;

Қазір бізде сынақ деректері бар мәліметтер базасы бар. Біз профильді іске қостық, бірақ жауап беру уақыты мен жолдар санын әдейі аз етіп орнаттық. Журналды көру үшін пәрменді пайдаланыңыз:

CD /var/log/mysql ls -l

Теориялық тұрғыдан, журнал файлы әлі болмауы керек, өйткені біз дерекқорға сұраулар жасамадық. Егер ол бар болса, бұл профильдеу бұрын конфигурацияланғанын білдіреді және бұл мысалдың нәтижелерін бұрмалауы мүмкін. Консольде іске қосыңыз:

Mysql> USE profile_sampling; mysql> ТАҢДАУ * пайдаланушылардан WHERE id = 1;

Біздің сұраныс кестедегі Негізгі кілт индексін пайдаланады. Сұраныс индекс арқылы өте жылдам өңделді, сондықтан ол журналда көрсетілмеуі керек. Журнал файлы жасалмауы керек екенін ескеріңіз.

Енді келесі әрекеттерді орындаңыз:

Mysql> ТАҢДАУ * FROM пайдаланушылардан WHERE name = "Jesse";

Бұл жерде біз индекстерді пайдаланбадық. Енді бұл сұрауды журналда көруіміз керек:

Sudo cat /var/log/mysql/localhost-slow.log # Уақыты: 140322 13:54:58 # User@Host: root @ localhost # Сұрау_уақыты: 0,000303 Құлыптау_уақыты: 0,000090 Жіберілген жолдар: 1 Жолдар_тексерілген: профильді қолдану: 10; SET уақыт белгісі=1395521698; ТАҢДАУ * FROM пайдаланушылардан WHERE name = «Джесси»;

Басқа мысалды қарастырайық. Жауаптағы жолдар санына жолақты көтеріп, келесі сұрауды орындаңыз:

Mysql> SET min_examed_row_limit = 100; mysql> ТАҢДАУ * FROM пайдаланушылардан WHERE name = "Walter";

Сұраныс журналда көрсетілмейді, өйткені біз сұрауға жауапта 100 жолдан аспадық.

Ескертпе: Егер деректер журналда көрсетілмесе, ең алдымен келесі факторларды ескеру қажет. Біріншісі - журнал файлы сақталатын каталогқа құқықтар. Топ пен пайдаланушы mysqld пайдаланушысына сәйкес болуы керек, құқықтар chmod 755 болуы керек. Екіншіден, профильдеу бұрын конфигурацияланған болуы мүмкін. Конфигурация файлынан бар профильдеу айнымалы мәндерін жойыңыз және серверді қайта іске қосыңыз немесе айнымалы мәндерді динамикалық түрде орнатыңыз. Динамикалық әдісті пайдалансаңыз, MySQL консолінен шығып, қайта кіресіз.

Сұраныс профилін жасау деректерін талдау

Жоғарыдағы мысалды қарастырыңыз:

# Уақыт: 140322 13:54:58 # User@Host: root @ localhost # Сұрау_уақыты: 0,000303 Құлыптау_уақыты: 0,000090 Жіберілген жолдар: 1 Жолдар_тексерілді: 10 профиль_үлгісін пайдалану; SET уақыт белгісі=1395521698; ТАҢДАУ * FROM пайдаланушылардан WHERE name = «Джесси»;

Мұнда біз көреміз:

  • Сұраныс басталған уақыт
  • Сұраныс жасаған пайдаланушы
  • Жұмыс уақыты туралы сұраулар
  • Құлыптау ұзақтығы
  • Таңдалған жолдар саны
  • Талданған жолдар саны

Бұл деректер өте пайдалы, өйткені оның көмегімен жүйенің баяулауының себебін табуға және жоюға болады. Сондай-ақ, MySQL әзірлеушісі немесе әкімшісі әрқашан проблемалық сұрауларды көре алады және оларды осы жерден табу қолданба кодын зерттеуге қарағанда әлдеқайда жылдамырақ екенін атап өткім келеді. Ұзақ мерзімді профильдеу арқылы жұмыс жағдайларын төмен жылдамдықпен бақылауға болады.

Mysqldumpslow пайдалану

Журнал деректерді үнемі жазып отырады, әдетте, ол одан оқылғаннан әлдеқайда көп жазады. Сағат үлкен өлшемжурнал, оны оқу проблемаға айналады. MySQL журналдың тұтастығын сақтауға көмектесетін mysqldumpslow деп аталатын құралды қамтиды. Бағдарламаның өзі MySQL-мен біріктірілген (қосу Linux жүйелері). Оны пайдалану үшін орындаңыз қажетті командажәне оған журнал файлына жол беріңіз:

Sudo mysqldumpslow -t 5 -s /var/log/mysql/localhost-slow.log

Пәрмен шығысын теңшеуге көмектесетін бірқатар параметрлер бар. Төмендегі мысалда біз орташа ұзақтығы бойынша сұрыпталған соңғы бес сұрауды көреміз. Нәтижесінде журналды оқу әлдеқайда ыңғайлы болады. (шығыс нақты журнал мәндерін көрсету үшін өзгертілген):

Санау: 2 Уақыт=68,34с (136с) Құлыптау=0,00с (0с) Жолдар=39892974,5 (79785949), root@localhost SELECT PL.pl_title, P.page_title FROM P INNER JOIN бет сілтемелері PL names ON PL.pace.page. ҚАЙДА P.page_namespace = N ...

Біз не көреміз:

  • Сан – журналдағы сұраудың қайталану саны
  • Уақыт – орташа және жалпы сұрау уақыты
  • Құлыптау - кестені құлыптау уақыты
  • Жолдар - таңдалған жолдар саны

Пәрмен сандық және жолдық сұрау деректерін қоспайды, яғни бірдей WHERE сөйлемі бар сұраулар бірдей деп есептеледі. Бұл құралдың арқасында журналды үнемі қарап отырудың қажеті жоқ. Пәрмен параметрлерінің көп болуына байланысты шығысты қалауыңызша сұрыптауға болады. Сондай-ақ ұқсас функционалдығы бар үшінші тарап өңдеулері бар, мысалы, pt-query-digest.

Сұраныс бөлу

Күрделі сұрауларды бөлшектеуге мүмкіндік беретін басқа құралға назар аудару керек. Көбінесе журналдан сұрауды алып, оны MySQL консолінде тікелей іске қосу керек. Алдымен профильді қосу керек, содан кейін сұрауды іске қосыңыз:

Mysql> SET SESSION профилін жасау = 1; mysql> profile_sampling USE; mysql> ТАҢДАУ * пайдаланушылардан WHERE name = «Джесси»; mysql> ПРОФИЛЬДЕРДІ КӨРСЕТУ;

Профильдеуді қосқаннан кейін ПРОФИЛЬДЕРДІ КӨРСЕТУ Query_ID және SQL өрнегін байланыстыратын кестені көрсетеді. Сәйкес сұрау_идентификаторын тауып, келесі сұрауды орындаңыз (# дегенді Сұраныс_идентификаторымен ауыстырыңыз):

Mysql> INFORMATION_SCHEMA.PROFILING FROM FROM * QUERY_ID=# ТАҢДАҢЫЗ;

Мысал шығару:

SEQ STATE DURATION 1 басталатын 0,000046 2 тексеру рұқсаттары 0,000005 3 ашу кестелері 0,000036

МЕМЛЕКЕТТІК- сұранысты орындау процесінің қадамы, ҰЗАҚТЫҚ- секундтағы қадам ұзақтығы. Бұл құрал өте жиі пайдаланылмайды, бірақ кейде ол сұраудың баяу жұмысының себебін анықтауда өте пайдалы болуы мүмкін.

Бағандардың толық сипаттамасы:

Қадамдардың толық сипаттамасы:

Ескертпе: Бұл құралды арнайы сұрауларды талдауды қоспағанда, серверді өндіру режимінде қолдануға болмайды.

Баяу сұрау журналының өнімділігі

Соңғы сұрақ - профильдеу тұтастай сервердің өнімділігіне қалай әсер етеді. Сервердің өндірістік режимінде мұндай тіркеуді қауіпсіз пайдалануға болады, ол процессорға да, енгізу-шығаруға да әсер етпеуі керек. Дегенмен, журнал файлының өлшеміне назар аударған жөн, ол шектен тыс үлкен болмауы керек. Сондай-ақ, long_query_time айнымалысының мәнін 1 секунд немесе одан жоғары етіп орнатуды тәжірибеден атап өткім келеді.

Маңызды: Профильдеу құралын - SET профилін жасау = 1 - барлық сұрауларды жазу үшін пайдаланбау керек, яғни. General_log айнымалы мәнін өнім режимінде және ауыр жүктемелерде пайдалану ұсынылмайды.

Қорытынды

Сұрау профилін жасау проблемалық сұрауды оқшаулауда және жалпы өнімділікті бағалауда сізге көп көмектеседі. Әзірлеуші ​​сонымен қатар өз қолданбасының MySQL сұрауларының қалай жұмыс істейтінін зерттей алады. Mysqldumpslow құралы сұрау журналдарын көруге және өңдеуге көмектеседі. Проблемалық сұрауларды анықтағаннан кейін, оларды максималды өнімділікке баптау ғана қалады.

Тұжырымдама

Сервер журналдары (журнал файлдары, сервер журналы)- сервердің жүйелік ақпаратын қамтитын серверде сақталған файлдар, сондай-ақ веб-ресурсқа кіруші туралы барлық мүмкін деректерді тіркеу.

Журналдарды жүйе әкімшілері келушілерді талдау үшін пайдаланады, пайдаланушылардың белгілі бір топтарының мінез-құлық үлгілерін зерттеу, сондай-ақ олар туралы әртүрлі ақпаратты алу, мысалы: пайдаланылған браузер, IP мекенжайы, клиенттің географиялық орны туралы деректер және т.б. Талдаумен қатар, осылайша сіз сайтқа рұқсатсыз кіру туралы біле аласыз, оны нақты кім жасағанын анықтай аласыз және бұл жағдай туралы деректерді тиісті органдарға бере аласыз.

Журнал файлындағы деректер оның таза түрінде қарапайым пайдаланушылар үшін түсініксіз болады, олар мұның бәрінде түсініксіз тәртіптегі таңбалар жиынтығын көреді. Бірақ үшін жүйелік әкімшілержәне веб-әзірлеушілер үшін бұл өте оқылатын мәтін және өте пайдалы ақпарат.


Оқиғалар тізбегі

Клиент веб-ресурсқа кірген сайын бірден бірнеше оқиға іске қосылады, олардың реті туралы айтатын боламыз.

1. Бетке сұраныс жасау.Браузер жолына мекенжайды енгізген кезде немесе белсенді веб-сілтемені орындаған кезде, мысалы, іздеу жүйесінің нәтижелері бетінен, шолғыш іздейді және бет орналасқан серверге қосылып, оған сұраныс жасайды. Сонымен бірге ол серверге келесі ақпаратты жібереді:
- бетті сұрайтын клиенттік компьютердің IP мекенжайы (прокси сервер пайдаланылса, проксидің IP мекенжайы);
- пайдаланушы сұраған интернет-парақшасының мекенжайы (IP мекенжайы);
- сұрау салудың нақты уақыты мен күні;
- клиенттің нақты орналасқан жері туралы деректер (егер прокси сервер пайдаланылса, онда нақты прокси мекенжайы);
- клиент пайдаланатын браузер туралы ақпарат (аты, нұсқасы және т.б.);
- клиент тасымалдаған веб-бет туралы деректер.

2. Сұралған деректерді тасымалдау.Сұралған деректер (веб-бет, файлдар, cookie файлдары және т.б.) серверден пайдаланушының компьютеріне тасымалданады.

3. Сервер журналына жазыңыз.Барлығынан кейін журнал жазбасы пайда болады, ол соңғы екі оқиғада пайда болған барлық деректерді көрсетеді. Бұл бірінші абзацта жіберілген барлық ақпарат, сондай-ақ жіберілген деректер туралы ақпарат.

Сервер журналдарын қалай көруге болады

Журнал файлдары файлда сақталады access.logқандай веб-сервер түрін пайдалансаңыз да (Apache, Nginx, squid прокси сервері, т.б.) Бұл файл мәтіндік құжат, оның әр жолында бір өтініш жазылған. Жазу форматтары access.logөте көп, бірақ ең танымал біріктірілген, онда жазба келесі пішін мен реттілікке ие:

Код: %h %l %u %t \"%r\" %>s %b \"%(Referer)i\" \"%(User-Agent)i\"
Қайда:

%сағ- сұраныс жасалған хост/IP мекенжайы;
%t- серверге сұрау уақыты және сервердің уақыт белдеуі;
%r- сұраныстың нұсқасы, мазмұны және түрі;
%s- HTTP күй коды;
%b- сервер жіберген байттардың саны;
%(Сілтеме беруші)- сұраудың URL көзі;
%(Пайдаланушы-агент)- HTTP тақырыбы, сұрау туралы ақпарат бар (клиент қолданбасы, тіл және т.б.);
%(хост)- қатынасатын виртуалды хосттың атауы.

Аяқтаған кезде бұл жол келесідей болады:

127.0.0.1 - - "GET /index.php HTTP/1..0 (үйлесімді; MSIE 7.0; Windows NT 5.1)"

Журналдарды қолмен оқу көп уақыт пен күш жұмсайды. Сондықтан тәжірибелі веб-шеберлер «Log File Analyzers» деп аталатын арнайы бағдарламалық жасақтаманы пайдаланады. Олар адам оқуы өте қиын барлық деректерді талдап, құрылымдық деректерді шығарады. Бұл келесідей бағдарламалар: Analog, WebAnalizer, Webalizer, Awstats, Webtrends және т.б.Арнайы түрлері бағдарламалық қамтамасыз етуөте көп, олардың арасында осындайлар бар ақылы бағдарламалар, және тегін. Сондықтан әркім өзіне ұнайтын нәрсені табатынына сенімдімін.

Сайт журналдарын қайдан табуға болады

Егер сізде тұрақты хостинг болса, онда сіз хосттерге хат жазып, одан журналдарды сұрауыңыз керек. Сондай-ақ, сіз оларды хостинг тақтасы арқылы жиі сұрай аласыз. Әртүрлі хостерлер мұны басқаша жасайды. Мысалы, менің хостымнан сұрау үшін жай ғана басыңыз басты бетпанельдер:


Егер сізде рұқсат болса жүйелік қалталарсерверден журналдарды таба аласыз /etc/httpd/logs/access_log 100-ден 99 жағдайда.

Қате журналы error.log

Error.log- журналдар да сақталатын файл. Бірақ келушілер емес, серверде орын алған қателер. Жағдайдағыдай access.log, файлдың әрбір жолы орын алған бір қатеге жауапты. Жазу келесі ақпаратты ескере отырып жүзеге асырылады: қате пайда болған нақты күні мен уақыты, қате жіберілген IP мекенжайы, қате түрі, сондай-ақ оның пайда болу себебі.

Қорытынды

Журналдар жұмыс істеу үшін өте қуатты және ақпараттық құрал болып табылады. Бірақ қазіргі уақытта олардың орнын Yandex.Metrica, Google Analytics және т.б. сияқты құралдар басып, осылайша біздің өмірімізді жеңілдетеді. Дегенмен, егер сіз дамуды, өсуді және жаңа нәрсені үйренуді жоспарласаңыз, мен сізге бұл тақырыпты жақсырақ білуге ​​кеңес беремін.




Жоғарғы