mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
homework 6.3: add tasks 3-4
This commit is contained in:
@@ -11,6 +11,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- netology_mysql_data:/var/lib/mysql
|
- netology_mysql_data:/var/lib/mysql
|
||||||
- ./dump:/opt/dump
|
- ./dump:/opt/dump
|
||||||
|
- ./inno_db.cnf:/etc/mysql/conf.d/inno_db.cnf
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
netology_mysql_data:
|
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`
|
> - на `MyISAM`
|
||||||
> - на `InnoDB`
|
> - на `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
|
### Задача 4
|
||||||
|
|
||||||
@@ -137,4 +223,16 @@ mysql> select * from INFORMATION_SCHEMA.USER_ATTRIBUTES where USER like 'test';
|
|||||||
>
|
>
|
||||||
> Приведите в ответе измененный файл `my.cnf`.
|
> Приведите в ответе измененный файл `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