mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 15:22:37 +03:00
homework 6.3: add tasks 3-4
This commit is contained in:
@@ -11,6 +11,7 @@ services:
|
||||
volumes:
|
||||
- netology_mysql_data:/var/lib/mysql
|
||||
- ./dump:/opt/dump
|
||||
- ./inno_db.cnf:/etc/mysql/conf.d/inno_db.cnf
|
||||
|
||||
volumes:
|
||||
netology_mysql_data:
|
||||
18
src/homework/06-database/6.3/inno_db.cnf
Normal file
18
src/homework/06-database/6.3/inno_db.cnf
Normal file
@@ -0,0 +1,18 @@
|
||||
[mysqld]
|
||||
|
||||
# Скорость IO важнее сохранности данных
|
||||
## Для случаев, когда небольшая потеря данных не критична.
|
||||
## В этом случае транзакции будут сбрасываться в лог на диск только раз в секунду.
|
||||
innodb_flush_log_at_trx_commit = 2
|
||||
|
||||
# Размер буффера с незакомиченными транзакциями 1 Мб
|
||||
## Но минимальный размер - 4Мб, оставим минималку.
|
||||
innodb_log_file_size=4MB
|
||||
|
||||
# Буффер кеширования 30% от ОЗУ
|
||||
## Предположим, что на сервере выделено 16GB RAM.
|
||||
## В данном случае, 30% от этого значения будет 5GB
|
||||
innodb_buffer_pool_size=5368709120
|
||||
|
||||
# Размер файла логов операций 100 Мб
|
||||
max_binlog_size=104857600
|
||||
@@ -122,7 +122,93 @@ mysql> select * from INFORMATION_SCHEMA.USER_ATTRIBUTES where USER like 'test';
|
||||
> - на `MyISAM`
|
||||
> - на `InnoDB`
|
||||
|
||||
// todo
|
||||
Внутри контейнера в утилите `mysql` выполним следующие запросы:
|
||||
|
||||
```shell
|
||||
>mysql SET profiling = 1;
|
||||
Query OK, 0 rows affected, 1 warning (0.00 sec)
|
||||
|
||||
>mysql SHOW PROFILES;
|
||||
+----------+------------+-------------------+
|
||||
| Query_ID | Duration | Query |
|
||||
+----------+------------+-------------------+
|
||||
| 1 | 0.00148925 | SELECT DATABASE() |
|
||||
| 2 | 0.00042175 | SELECT DATABASE() |
|
||||
| 3 | 0.01061875 | show databases |
|
||||
| 4 | 0.00783050 | show tables |
|
||||
+----------+------------+-------------------+
|
||||
4 rows in set, 1 warning (0.00 sec)
|
||||
```
|
||||
|
||||
Вывод запроса `SHOW PROFILES` показывает, какие запросы были выполнены недавно на сервере к БД.
|
||||
По умолчанию, хранится 15 последних запросов.
|
||||
|
||||
Для вывода движка таблицы необходимо использовать следующий запрос:
|
||||
|
||||
```sql
|
||||
select engine from INFORMATION_SCHEMA.TABLES where table_name like 'orders';
|
||||
+--------+
|
||||
| ENGINE |
|
||||
+--------+
|
||||
| InnoDB |
|
||||
+--------+
|
||||
```
|
||||
|
||||
Для чистоты эксперимента, лучше всего будет выполнить запрос на `select` из таблицы, чтобы он попал в список профилировщика.
|
||||
После этого нужно вывести скорость его выполнения:
|
||||
|
||||
```shell
|
||||
mysql> select * from orders;
|
||||
<...>
|
||||
mysql> SHOW PROFILES;
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
| Query_ID | Duration | Query |
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
| <...> | <...> | <...> |
|
||||
| 7 | 0.00249175 | select * from orders |
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
Следующим шагом необходимо изменить `engine` таблицы, выполнить запрос на `select`
|
||||
и снова вывести список из профилировщика:
|
||||
|
||||
```shell
|
||||
mysql> alter table orders ENGINE='MYISAM';
|
||||
Query OK, 5 rows affected (0.03 sec)
|
||||
Records: 5 Duplicates: 0 Warnings: 0
|
||||
|
||||
mysql> select * from orders;
|
||||
<...>
|
||||
|
||||
mysql> SHOW PROFILES;
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
| Query_ID | Duration | Query |
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
| <...> | <...> | <...> |
|
||||
| 8 | 0.02865275 | alter table orders ENGINE='MYISAM' |
|
||||
| 9 | 0.00079400 | select * from orders |
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
Затем нужно вернуть исходный движок таблицы:
|
||||
|
||||
```shell
|
||||
alter table orders ENGINE='InnoDB';
|
||||
Query OK, 5 rows affected (0.05 sec)
|
||||
Records: 5 Duplicates: 0 Warnings: 0
|
||||
|
||||
mysql> SHOW PROFILES;
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
| Query_ID | Duration | Query |
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
| <...> | <...> | <...> |
|
||||
| 10 | 0.05557025 | alter table orders ENGINE='InnoDB' |
|
||||
+----------+------------+-----------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
Таким образом, можно сделать два вывода:
|
||||
1. Перестроение таблицы из `InnoDB` в `MYISAM` происходит быстрее, чем в другую сторону
|
||||
2. Простейший запрос на `select` выполняется быстрее в таблице с `engine=MYISAM`, чем с `engine=InnoDB`
|
||||
|
||||
### Задача 4
|
||||
|
||||
@@ -137,4 +223,16 @@ mysql> select * from INFORMATION_SCHEMA.USER_ATTRIBUTES where USER like 'test';
|
||||
>
|
||||
> Приведите в ответе измененный файл `my.cnf`.
|
||||
|
||||
// todo
|
||||
Файл `my.cnf` самостоятельно не когфигурирует mysql, но читает все конфиг-файлы из директории `/etc/mysql/conf.d`.
|
||||
Таким образом, чтобы изменить конфигурацию сервера, достаточно создать новый файл, например, `/etc/mysql/conf.d/inno_db.cnf`.
|
||||
|
||||
Для выполнения задач из ТЗ, необходимо применить следующую конфигурацию:
|
||||
|
||||
- Скорость IO важнее сохранности данных: `innodb_flush_log_at_trx_commit = 2`
|
||||
- Нужна компрессия таблиц для экономии места на диске: в данном случае это невозможно сконфигурировать,
|
||||
необходимо специально создавать или изменять таблицы, применяя `ROW_FORMAT=COMPRESSED`.
|
||||
- Размер буффера с незакомиченными транзакциями 1 Мб: невозможно применить, так как минимальный размер конфига `innodb_log_file_size` - 4Мб.
|
||||
- Буффер кеширования 30% от ОЗУ: `innodb_buffer_pool_size=5368709120`.
|
||||
- Размер файла логов операций 100 Мб: `max_binlog_size=104857600`.
|
||||
|
||||
Конфигурация расположена в файле [inno_db.cnf](./inno_db.cnf).
|
||||
Reference in New Issue
Block a user