SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.03.2012 12:35:33

Demolitionman
Участник
Зарегистрирован: 05.03.2012
Сообщений: 3

Оптимизация MYSQL

Добрый день! Существует бд MYSQL 5.0.18 на winserver 2003 в последнее время начались тупняки с базой в связи с разрастанием объемов данных, по мимо бд на сервере еще был установлен файлсервер, по этому первое что пришло в голову это разделить сервы на разные машины для ускорения работы приложений. переехали на Linux Arch, Mysql 5.5.21, результат 0.
Так же долго обрабатываются запросы как и на виндовом сервере, вообще ни каких изменений. при запросе проц грузится на 100%. результат приходится ждать 20 сек что очень не удобно складовщикам, т.к позиций дохерища вбивать нужно))) единственное что как то сократило время это запросы с гиговой сеткой, тогда время обработки запроса снижается вдвое.
конф mysql


[client]

port            = 3306
socket          = /var/run/mysqld/mysqld.sock
[mysqld]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock
datadir         = /home/mysql
init-connect='SET NAMES cp1251'
skip-external-locking
key_buffer_size = 300M #16M
lower-case-table-names = 1
query_cache_size=532M
binlog_format=mixed

server-id       = 1

innodb_data_home_dir = /home/mysql
innodb_buffer_pool_size = 1600M
innodb_file_per_table = 1

innodb_flush_log_at_trx_commit = 0

[mysqldump]

quick
max_allowed_packet = 10M

[mysql]
no-auto-rehash
[mysqlhotcopy]
interactive-timeout


параметры конфига всячески менялись и уже далеки от дефолтного)))

Базы в основнвом в InnoDB

Неактивен

 

#2 05.03.2012 13:59:43

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация MYSQL

А запросы то какие? Если помогла сеть — наверное, вытягиваете все данные
каждый раз?

Неактивен

 

#3 05.03.2012 14:43:51

Demolitionman
Участник
Зарегистрирован: 05.03.2012
Сообщений: 3

Re: Оптимизация MYSQL

в общем добавил я пару параметров в конф

long_query_time = 5
log-slow-queries=/var/log/mysql.log

c программы клиента делаю запрос в базу с поиском позиции 00000166. жду сек 10

[root@servak1 ~]# cat  /var/log/mysql.log
# Time: 120305 10:27:09
# User@Host: user[] @  [192.168.1.227]
# Query_time: 6.658888  Lock_time: 0.002088 Rows_sent: 0  Rows_examined: 36354758
use rp78;
SET timestamp=1330921629;
SELECT `DetCode`, `HeaderCode`, `CorrAcc`, `summrecs`.`OurLogNumber`, `summrecs`.`ManRefNumber`, `summrecs`.`EANCode`, `IsUniqueName`, `UniqueName`, `NonTypicalPlaced`, `PlaceCode`, `History` AS MHistory, `Remark` AS MRemark, `DateOfWrite`, `IsUsedAsBase`, `DateOfUsing`, `TypeOfRecord`, `RoomCode`, `TypeOfOriginRec`, `Price`,`ExtUniqueName`, SUM( `QtyOnOrigin` ) AS StartQty, SUM( `QtyIn` ) AS PlusQty, SUM( `QtyOut` ) AS MinusQty, SUM( `QtyOnFinish` ) AS FinishQty, SUM(`SummPerString`) AS SumPerItems,`UniqueUnitPerPack`, IF(`IsUniqueName`,`UniqueName`,`detmatregistry`.`RussianName`) As `Name`, IF(`IsUniqueName`,`UniqueUnitPerPack`,`detmatregistry`.`UnitPerPack`) As `UnitPerPack` FROM `summrecs` left join (`iecommon`.`detmatregistry`) ON (`summrecs`.`ManRefNumber`=`detmatregistry`.`ManRefNumber`) WHERE (`summrecs`.`ManRefNumber` IN ( SELECT `ManRefNumber` FROM `iecommon`.`sinview` WHERE (`ManRefNumber` IS NOT NULL) AND (`SinManRefNumber`='00000166' OR `SinName`='��������������� ��-2-35� 1,5��') ))OR( `UniqueName` IN ( SELECT `RussianName` AS `UniqueName` FROM `iecommon`.`sinview` WHERE (`RussianName` IS NOT NULL) AND (`SinManRefNumber`='00000166' OR `SinName`='��������������� ��-2-35� 1,5��') )) GROUP BY `ManRefNumber`,`IsUniqueName`,`UniqueName`,`NonTypicalPlaced`,`PlaceCode` ORDER BY `ManRefNumber` ASC;


Затем делаю еще один запрос, который длится сек 20.
[root@servak1 ~]# cat  /var/log/mysql.log
# Time: 120305 10:31:43
# User@Host: user[] @  [192.168.1.227]
# Query_time: 6.402292  Lock_time: 0.000379 Rows_sent: 0  Rows_examined: 36354758
SET timestamp=1330921903;
SELECT `DetCode`, `HeaderCode`, `CorrAcc`, `summrecs`.`OurLogNumber`, `summrecs`.`ManRefNumber`, `summrecs`.`EANCode`, `IsUniqueName`, `UniqueName`, `NonTypicalPlaced`, `PlaceCode`, `History` AS MHistory, `Remark` AS MRemark, `DateOfWrite`, `IsUsedAsBase`, `DateOfUsing`, `TypeOfRecord`, `RoomCode`, `TypeOfOriginRec`, `Price`,`ExtUniqueName`, SUM( `QtyOnOrigin` ) AS StartQty, SUM( `QtyIn` ) AS PlusQty, SUM( `QtyOut` ) AS MinusQty, SUM( `QtyOnFinish` ) AS FinishQty, SUM(`SummPerString`) AS SumPerItems,`UniqueUnitPerPack`, IF(`IsUniqueName`,`UniqueName`,`detmatregistry`.`RussianName`) As `Name`, IF(`IsUniqueName`,`UniqueUnitPerPack`,`detmatregistry`.`UnitPerPack`) As `UnitPerPack` FROM `summrecs` left join (`iecommon`.`detmatregistry`) ON (`summrecs`.`ManRefNumber`=`detmatregistry`.`ManRefNumber`) WHERE (`summrecs`.`ManRefNumber` IN ( SELECT `ManRefNumber` FROM `iecommon`.`sinview` WHERE (`ManRefNumber` IS NOT NULL) AND (`SinManRefNumber`='00000166' OR `SinName`='��������������� ��-2-35� 1,5��') ))OR( `UniqueName` IN ( SELECT `RussianName` AS `UniqueName` FROM `iecommon`.`sinview` WHERE (`RussianName` IS NOT NULL) AND (`SinManRefNumber`='00000166' OR `SinName`='��������������� ��-2-35� 1,5��') )) GROUP BY `ManRefNumber`,`IsUniqueName`,`UniqueName`,`NonTypicalPlaced`,`PlaceCode` ORDER BY `ManRefNumber` ASC;
# Time: 120305 10:31:50
# User@Host: user[] @  [192.168.1.227]
# Query_time: 6.391286  Lock_time: 0.000381 Rows_sent: 0  Rows_examined: 36354758
SET timestamp=1330921910;
SELECT `DetCode`, `HeaderCode`, `CorrAcc`, `summrecs`.`OurLogNumber`, `summrecs`.`ManRefNumber`, `summrecs`.`EANCode`, `IsUniqueName`, `UniqueName`, `NonTypicalPlaced`, `PlaceCode`, `History` AS MHistory, `Remark` AS MRemark, `DateOfWrite`, `IsUsedAsBase`, `DateOfUsing`, `TypeOfRecord`, `RoomCode`, `TypeOfOriginRec`, `Price`,`ExtUniqueName`, SUM( `QtyOnOrigin` ) AS StartQty, SUM( `QtyIn` ) AS PlusQty, SUM( `QtyOut` ) AS MinusQty, SUM( `QtyOnFinish` ) AS FinishQty, SUM(`SummPerString`) AS SumPerItems,`UniqueUnitPerPack`, IF(`IsUniqueName`,`UniqueName`,`detmatregistry`.`RussianName`) As `Name`, IF(`IsUniqueName`,`UniqueUnitPerPack`,`detmatregistry`.`UnitPerPack`) As `UnitPerPack` FROM `summrecs` left join (`iecommon`.`detmatregistry`) ON (`summrecs`.`ManRefNumber`=`detmatregistry`.`ManRefNumber`) WHERE (`summrecs`.`ManRefNumber` IN ( SELECT `ManRefNumber` FROM `iecommon`.`sinview` WHERE (`ManRefNumber` IS NOT NULL) AND (`SinManRefNumber`='00000166' OR `SinName`='��������������� ��-2-35� 1,5��') ))OR( `UniqueName` IN ( SELECT `RussianName` AS `UniqueName` FROM `iecommon`.`sinview` WHERE (`RussianName` IS NOT NULL) AND (`SinManRefNumber`='00000166' OR `SinName`='��������������� ��-2-35� 1,5��') )) GROUP BY `ManRefNumber`,`IsUniqueName`,`UniqueName`,`NonTypicalPlaced`,`PlaceCode` ORDER BY `ManRefNumber` ASC;
# Time: 120305 10:31:56
# User@Host: user[] @  [192.168.1.227]
# Query_time: 6.398156  Lock_time: 0.000455 Rows_sent: 0  Rows_examined: 36354758
SET timestamp=1330921916;
SELECT `DetCode`, `HeaderCode`, `CorrAcc`, `summrecs`.`OurLogNumber`, `summrecs`.`ManRefNumber`, `summrecs`.`EANCode`, `IsUniqueName`, `UniqueName`, `NonTypicalPlaced`, `PlaceCode`, `History` AS MHistory, `Remark` AS MRemark, `DateOfWrite`, `IsUsedAsBase`, `DateOfUsing`, `TypeOfRecord`, `RoomCode`, `TypeOfOriginRec`, `Price`,`ExtUniqueName`, SUM( `QtyOnOrigin` ) AS StartQty, SUM( `QtyIn` ) AS PlusQty, SUM( `QtyOut` ) AS MinusQty, SUM( `QtyOnFinish` ) AS FinishQty, SUM(`SummPerString`) AS SumPerItems,`UniqueUnitPerPack`, IF(`IsUniqueName`,`UniqueName`,`detmatregistry`.`RussianName`) As `Name`, IF(`IsUniqueName`,`UniqueUnitPerPack`,`detmatregistry`.`UnitPerPack`) As `UnitPerPack` FROM `summrecs` left join (`iecommon`.`detmatregistry`) ON (`summrecs`.`ManRefNumber`=`detmatregistry`.`ManRefNumber`) WHERE (`summrecs`.`ManRefNumber` IN ( SELECT `ManRefNumber` FROM `iecommon`.`sinview` WHERE (`ManRefNumber` IS NOT NULL) AND (`SinManRefNumber`='00000166' OR `SinName`='��������������� ��-2-35� 1,5��') ))OR( `UniqueName` IN ( SELECT `RussianName` AS `UniqueName` FROM `iecommon`.`sinview` WHERE (`RussianName` IS NOT NULL) AND (`SinManRefNumber`='00000166' OR `SinName`='��������������� ��-2-35� 1,5��') )) GROUP BY `ManRefNumber`,`IsUniqueName`,`UniqueName`,`NonTypicalPlaced`,`PlaceCode` ORDER BY `ManRefNumber` ASC;
 


я вот в последнем логе не понял почему запрос выполняется 3 раза?
Данные по ходу вытягиваются каждый раз

Неактивен

 

#4 05.03.2012 23:19:49

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Оптимизация MYSQL

Перепишите запрос через join. На данный момент подзапрос в IN выполняется для каждой строки внешнего запроса, несмотря на то, что они не зависимы и выполняться он должен только один раз.

Неактивен

 

#5 06.03.2012 12:05:35

Demolitionman
Участник
Зарегистрирован: 05.03.2012
Сообщений: 3

Re: Оптимизация MYSQL

Переписать запрос нет возможности. нет исходных кодов клиента. а вот почему запрос выполняется 3 раза?! Может ли это быть из-за таймаутов каких нибудь?! думаю что если добиться однократного выполнения данного запроса, скорость работы возрастет в три раза. это будет уже приемлемо. Кто нибудь в курсе в каком направлении копать?

Неактивен

 

#6 06.03.2012 12:26:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация MYSQL

EXPLAIN от запросов посмотрите. Скорее всего, нет каких-то индексов.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson