2025-07-17 19:02:43
#ok Для нагрузочного тестирования MariaDB
CREATE DATABASE test_load;
USE test_load;
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX(user_id),
INDEX(product_id)
);
DELIMITER //
CREATE PROCEDURE fill_orders(IN total INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= total DO
INSERT INTO orders (user_id, product_id, quantity, price)
VALUES (
FLOOR(1 + RAND()*1000),
FLOOR(1 + RAND()*500),
FLOOR(1 + RAND()*10),
ROUND(RAND()*100, 2)
);
SET i = i + 1;
END WHILE;
END
//
DELIMITER ;
DELIMITER //
CREATE PROCEDURE run_load_test(IN iterations INT)
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < iterations DO
SELECT user_id, SUM(quantity*price) AS total_spent
FROM orders
WHERE created_at > NOW() - INTERVAL 1 DAY
GROUP BY user_id
ORDER BY total_spent DESC
LIMIT 10;
DO SLEEP(0.01);
SET i = i + 1;
END WHILE;
END
//
DELIMITER ;
=============
CALL fill_orders(100000);
CALL run_load_test(1000);
# mysql -u root -e "USE test_load; CALL run_load_test(1000);"
Back to list