Mysql сервер медленнее на сервере Ubuntu, чем рабочий стол Ubuntu - PullRequest
0 голосов
/ 05 мая 2018

Я хочу проверить скорость работы mysql-сервера (5.7.22 на обоих, установленных с помощью apt-get) на рабочем столе Ubuntu против сервера Ubuntu для школьного проекта. У меня есть скрипт, который запускает 3 sql запросов, каждый 10000 раз и записывает время, необходимое для завершения каждого запроса в файле. В среднем мои запросы занимали около 10 миллисекунд на рабочем столе Ubuntu (18,04 64-битных), но они занимали 2,5 секунды на запрос на моем сервере Ubuntu (18,04 64-битных), что делает его бесконечным и несопоставимым с другим набором результатов. Я понятия не имею, почему это так, они находятся на одном диске и имеют одинаковые ресурсы (ЦП, ОЗУ и сохранены на одном и том же SSD), они оба работают в Virtualbox (но я тестирую их только с 1 машиной, работающей на время).

Я использую пример базы данных сотрудников из mysql.

Мой скрипт:

#!/bin/bash

AantalQ=3 #Amount of queries.
AantalHH=10000  #How often to repeat the queries.

for ((i=1; i<=AantalQ; i++)); do #Loop through queries.
    for ((j=0; j<AantalHH; j++)); do #Repeat the current query.
        echo "Query$i uitvoering $j" #Progress.
        time (mysql --login-path=local employees < "Query$i.sql" > null) 2>> tijd.csv
    done
done

sed -i.bak '/real/!d' tijd.csv #Delete all lines without 'real'.
tr -dc "0-9\n" <tijd.csv >temp.tmp && mv temp.tmp tijd.csv #Delete everything except for numbers.
sed -i.bak 's/^0*//' tijd.csv #Delete leading zeros.

Мои запросы:

1

USE employees;
SELECT SUM(salaries.salary),
  AVG(salaries.salary),
  MAX(salaries.salary),
  COUNT(employees.emp_no)
FROM employees
JOIN salaries ON employees.emp_no=salaries.emp_no;

2

USE employees;
SELECT *                        #208734 records
FROM employees
JOIN salaries ON employees.emp_no=salaries.emp_no
WHERE first_name LIKE 'A%' AND salary > 2500;

3

USE employees;
SELECT concat(first_name, ' ', last_name) as fullname, de.from_date, de.to_date, dept_name, dm.from_date, dm.to_date, title, salary
FROM employees e
JOIN salaries s ON e.emp_no = s.emp_no
JOIN titles t ON e.emp_no = t.emp_no
JOIN dept_emp de ON e.emp_no = de.emp_no
JOIN departments d ON d.dept_no = de.dept_no
JOIN dept_manager dm ON d.dept_no = dm.dept_no

WHERE first_name LIKE 'B%' OR first_name LIKE 'C%' OR first_name LIKE 'Z%'AND last_name LIKE 'C%' OR last_name LIKE 'O%' OR last_name LIKE 'X%';
    #WHERE DATE(birth_date) BETWEEN '1980-01-01' AND '1980-01-01'

Заранее спасибо!

1 Ответ

0 голосов
/ 05 мая 2018

установите mysqltuner, выполнив

apt-get install mysqltuner

и запустите его на каждой виртуальной машине. Надеюсь, он покажет вам, в чем разница в процессе анализа. Удачи!

...