{"id":19762523,"url":"https://github.com/levvolkov/database_load_testing","last_synced_at":"2026-04-18T01:37:02.167Z","repository":{"id":262253066,"uuid":"884984595","full_name":"levvolkov/database_load_testing","owner":"levvolkov","description":"4. «Проведение нагрузочного тестирования DB»","archived":false,"fork":false,"pushed_at":"2024-11-11T12:06:46.000Z","size":5552,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T10:15:38.576Z","etag":null,"topics":["dbeaver","docker-container","jmeter-tests","mariadb","stored-procedure"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/levvolkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-07T18:34:45.000Z","updated_at":"2025-01-29T15:21:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"ff616871-87c9-40fa-9247-bd50128b0082","html_url":"https://github.com/levvolkov/database_load_testing","commit_stats":null,"previous_names":["levvolkov/database_load_testing"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/levvolkov/database_load_testing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2Fdatabase_load_testing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2Fdatabase_load_testing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2Fdatabase_load_testing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2Fdatabase_load_testing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/levvolkov","download_url":"https://codeload.github.com/levvolkov/database_load_testing/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2Fdatabase_load_testing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272200565,"owners_count":24890816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-26T02:00:07.904Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dbeaver","docker-container","jmeter-tests","mariadb","stored-procedure"],"created_at":"2024-11-12T04:04:42.801Z","updated_at":"2026-04-18T01:37:02.131Z","avatar_url":"https://github.com/levvolkov.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Домашнее задание к лекции 4 «Проведение нагрузочного тестирования DB»\n\n[Задание.](https://github.com/netology-code/loadqa-homeworks/blob/main/4.Load%20db/homework_lecture4.md)\n\n\n\n## Cреда нагрузочного тестирования:\n  * Установлен [Docker](https://github.com/netology-code/aqa-homeworks/blob/master/docker/installation.md).\n  * Установлен [DBeaver](https://dbeaver.io/download/).\n  * Установлен [JMeter](https://github.com/netology-code/iqa-homeworks/blob/iqa-64/Instruction.md).\n\n\n## Сделано:\n\n#### 1. Запуск сайта WordPress\n  * В процессе выполнения задач по нагрузочному тестированию базы данных была проведена настройка проекта WordPress, который позволяет создавать сайты без знания языков программирования.\n    * Команды для подготовки и запуска проекта:\n```bash\n   # Переход в директорию для хранения проекта:\n   cd ~/Documents/Performance_testingQA79\n\n   # Клонирование репозитория проекта:\n   git clone https://github.com/mshegolev/congenial-potato.git\n\n   # Переход в каталог WordPress и открытие папки wp в Visual Studio Code:\n   cd congenial-potato/wp \u0026\u0026 code .\n```\n  * Для совместимости плагинов в `docker-compose.yml` изменен образ контейнера на `image: wordpress:php8.0`.\n    * Добавлена строка `platform: linux/x86_64`, чтобы указать Docker на создание образов для архитектуры x86_64 (необходимо для работы на Apple M1 с архитектурой ARM).\n    * Чтобы избежать предупреждения при запуске контейнеров удалена строка `version: '3'`.\n      * В версиях Docker Compose 2.0 и выше больше не требуется указывать версию файла, так как композитор теперь автоматически обрабатывает данные. Это упрощает работу и делает файлы конфигурации более понятными.\n  * Запущены контейнеры с помощью Docker и проверено их состояние:\n```bash\n   # Запуск контейнеров Docker в фоновом режиме\n   docker-compose up -d\n\n   # Проверка запущенных контейнеров\n   docker ps\n```\n  * В браузере по адресу `localhost:80` указанном в `docker-compose.uml` запущен сайт WordPress.\n    * Выбран язык.\n    * Заполнены все поля: название сайта, имя пользователя, email, придуман пароль, ☑️. \n    * На странице добавления комментария, я убедился, что комментарий успешно добавляется.\n\n#### 2.Подключение к базе данных WordPress\n  * Подключение к базе данных [MariaDB](https://mariadb.com/kb/ru/a-mariadb-primer/) было успешно выполнено с использованием DBeaver, который используется для работы с системой управления базами данных (СУБД).\n    * В DBeaver была выбрана база данных MariaDB и настроено подключение с использованием следующих данных, взятых из файла `docker-compose.yml`\n      * host: `localhost` port: `3306`\n      * database: `wpdb`\n      * username: `wpuser`\n      * password: `wppassword`\n    * Также были загружены файлы драйвера для MariaDB.\n\n#### 3. Установка [хранимой процедуры](https://ru.wikipedia.org/wiki/%D0%A5%D1%80%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%8F_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D0%B0) базы данных WordPress\n  * Произведена проверка доступа к комментарию: Базы данных =\u003e wpdb =\u003e Таблицы =\u003e wp_comments\n  * Скопирован файл с хранимой процедурой [`scripts.sql`](jmeter-tests/scripts.sql) и перенесен в DBeaver. В `меню` выбрано `Редактор SQL` и создан новый редактор, где был вставлен скопированный код.\n    * ▶️ Выделен код и вызвана команда на удаление хранимой процедуры `drop procedure if exists dorepeat_v1;`, так как в процедуре были внесены изменения — комментарий `comment` был изменен на `дождь`.\n    * ▶️ Затем выделен весь код, относящийся к хранимой процедуре `dorepeat_v1`, который заканчивается ключевым словом `END`, и была вызвана команда для создания процедуры.\n    * ▶️ Для создания процедуры `dorepeat_v2`, выделен полный код, заканчивающийся на `END`, и выполнена команда для её создания (команда на удаление для `dorepeat_v2` не потребовалась, так как данная процедура до этого не существовала).\n    * 🔁 Обновлена папка `Процедуры`, чтобы убедиться, что процедуры созданы.\n\n#### 4. Проверка работы хранимой процедуры\n  * Вызов хранимой процедуры: \n    * ▶️ Выполнена команда на запуск процедуры `CALL dorepeat_v1(5);` для создания 5 комментариев со словом «дождь», указанным в хранимой процедуре `dorepeat_v1`.\n      * Так как тестовые записи были созданы напрямую в базу данных, не отработала логика работы счетчика количества комментариев на тестируемой странице `http://localhost/привет-мир`. Перед тестированием следует уточнить, насколько важно, чтобы какая-то логика отрабатывала и не терялась.\n    * ▶️ Для создания 5 комментариев со словом «солнце» была вызвана команда `CALL dorepeat_v2(5,'солнце');`.\n      * В отличие от хранимой процедуры v1, в процедуре v2, помимо текста указывался также номер комментария (1солнце, 2солнце и т. д.).\n    * ▶️ Для удаления комментариев выполнен код `DELETE FROM wp_comments...`, относящийся к очистке базы данных.\n  \n#### 5. Настройка запуска хранимых процедур при помощи JMeter\n  * Скачан [JDBC-драйвер для MySQL](https://dev.mysql.com/downloads/connector/j/) и помещен в папку lib внутри каталога JMeter:\n```bash\n   mv ~/Downloads/mysql-connector-j-8.4.0.jar /Applications/apache-jmeter-5.6.3/lib\n```\n  * Скачанный файл [`wp_db_test.jmx`](jmeter-tests/wp_db_test.jmx) был перемещен в директорию для хранения тестов производительности и запущен с помощью JMeter для проведения нагрузочного тестирования базы данных:\n```bash\n   # Созданы папки для хранения проекта:\n   mkdir -p ~/Documents/Performance_testingQA79/Database_load_testing/jmeter-tests\n             \n   # Перемещение файла .jmx в директорию:\n   mv ~/Downloads/wp_db_test.jmx ~/Documents/Performance_testingQA79/Database_load_testing/jmeter-tests\n\n   # # Переход в директорию:\n   cd ~/Documents/Performance_testingQA79/Data_load-testing/jmeter-tests\n\n   #Открытие теста в JMeter:\n   jmeter -t wp_db_test.jmx \n```\n  * Установлены графики в JMeter (Add =\u003e Listener =\u003e jp@gc - Назввание графика)\n    * Hits per Second (HPS, запросов в секунду)\n      * График Hits per Second (HPS) в Apache JMeter отображает количество HTTP-запросов, поступающих на сервер за одну секунду, и помогает оценить его производительность и нагрузку.\n    * Transactions per Second (TPS, транзакций в секунду)\n      *  Этот график является одним из ключевых индикаторов производительности приложения и позволяет оценить, насколько эффективно система справляется с нагрузкой.\n    * Response Times Over Time (Время отклика с течением времени) \n      * Этот график отображает время отклика запросов по мере выполнения теста. Можно увидеть, как время отклика изменяется, например, в зависимости от увеличения нагрузки.\n     \n#### 6. Автоматизация запуска хранимых процедур при помощи JMeter    \n  * В системе была вызвана настройка **Set Up**, в которой использовалось 5 пользователей. В этой настройке группа **readers** и **writers** была закомментирована (Disable), и тест был запущен.\n  * Затем была закомментирована группа **readers**, и группа **Set Up** была отключена, в то время как группа **writers** была раскомментирована, чтобы вызвать хранимую процедуру `v2`.  \n  * Были сделаны скриншоты графиков процедуры `v2` для дальнейшего сравнения с процедурой `v1`.\n  * После этого была закомментирована группа **writers v2**, и вызвана хранимая процедура `v1`.\n  * Были сделаны [скриншоты](dorepeat-report) в качестве доказательства того, что процедура `v2` работает медленнее, чем процедура `v1`.\n    \n\u003cp align=\"center\"\u003e\n\u003cimg width=\"43.5%\" src=\"dorepeat-report/v1_Response_Times_Over_Time.png\"/\u003e\n\u003cimg width=\"54%\"src=\"dorepeat-report/v2_Response_Times_Over_Time.png\"/\u003e\n\u003c/p\u003e\n\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n-----\n\n\n\n\n\u003cdetails\u003e\n  \u003csummary\u003eЕсли во время теста появится ошибка:\u003c/summary\u003e\n\n    По умолчанию для работы JMeter компьютер выделяет 1 GB памяти, чтобы обеспечить стабильную работу тестов на машине. Однако, для ресурсоемких тестов, этого объема может не хватать, что приводит к ошибкам из-за нехватки памяти.\n    Решением в этой ситуации является увеличение выделенной для JMeter памяти:\n\n    Откройте файл jmeter.bat, если работаете в Windows, или jmeter.sh, если работаете на Linux или на Mac, в текстовом редакторе.\n    Найдите строчку:\n\n        set HEAP=-Xms1g -Xmx1g\n\n    Увеличьте память до комфортного вам объема. Учтите, что JMeter не должен использовать всю память вашего компьютера, поэтому не выделяйте больше памяти, чем у вас доступно. Рекомендуется установить 2 GB, этого должно быть достаточно для ваших задач:\n\n        set HEAP=-Xms2g -Xmx2g\n\u003c/details\u003e\n\n### Дополнительная информация\n- [build-db-test-plan](https://jmeter.apache.org/usermanual/build-db-test-plan.html) — инструкция создания теста DB с нуля.\n- [mysql-db-driver](https://dev.mysql.com/downloads/connector/j/) — драйвер с официального сайта для установка в JMeter/Lib.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevvolkov%2Fdatabase_load_testing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flevvolkov%2Fdatabase_load_testing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevvolkov%2Fdatabase_load_testing/lists"}