SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 19.09.2011 14:58:11

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Таблица HEAP как точная копия MyISAM

Здравствуйте,

проблема заключается в том, что есть таблица товаров, в которой 83 000 записей, таблица достаточно активно обновляется, и поэтому некоторые достаточно простые запросы попадают в slow query log (из-за блокировок).
Хочу решить проблему копированием таблицы в память, при этом обновлять чуть реже, но все равно интенсивно.
Возможно ли постоянное обновление таблицы в памяти возложить на MySQL или придется обновлять по крону?
И если обновлять по крону, какими запросами лучше это делать: DROP-CREATE, TRUNCATE-INSERT, REPLACE?

Спасибо. +)

Неактивен

 

#2 19.09.2011 23:30:15

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Таблица HEAP как точная копия MyISAM

таблица достаточно активно обновляется, и поэтому некоторые достаточно простые запросы попадают в slow query log (из-за блокировок).

Используйте Innodb и блокировок не будет.

Если вас интересует порядок действий при переносе из memory table в простую таблицу.

То это

RENAME TABLE memory_table TO memory_tmp,memory_empty TO memory_table;
INSERT INTO disk_table SELECT * FROM memory_tmp;
TRUNCATE memory_tmp;
RENAME TABLE memory_tmp TO memory_empty;

Неактивен

 

#3 20.09.2011 11:08:15

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Таблица HEAP как точная копия MyISAM

Я сделал через CREATE-RENAME-DROP.

Один фиг, даже разбил большую таблицу на несколько маленьких, и все равно такой запрос к таблице HEAP длиться 2 секунды:


SELECT
    products_id,
    (
        IF(name LIKE '%205%55%16%91%h%winterreifen%',3,1) +
        IF(name LIKE '%205%55%16%91%h%winterreifen%',5,1) +
        IF(name LIKE '%205%55%16%91h%winterreifen%',7,1) +
        IF(name LIKE '%205%',2,1) +
        IF(name LIKE '%55%',2,1) +
        IF(name LIKE '%16%',2,1) +
        IF(name LIKE '%91h%',2,1) +
        IF(name LIKE '%winterreifen%',2,1) +
        IF(name LIKE '%205%',2,1) +
        IF(name LIKE '%55%',2,1) +
        IF(name LIKE '%16%',2,1) +
        IF(name LIKE '%91%',2,1) +
        IF(name LIKE '%h%',2,1) +
        IF(name LIKE '%winterreifen%',2,1)
    ) as name_rating
FROM
    products_name
WHERE
    (
        name LIKE '%205%55%16%91%h%winterreifen%'
        OR name LIKE '%205%55%16%91%h%winterreifen%'
        OR name LIKE '%205%55%16%91h%winterreifen%'
        OR (
            name LIKE '%205%'
            AND name LIKE '%55%'
            AND name LIKE '%16%'
            AND name LIKE '%91h%'
            AND name LIKE '%winterreifen%'
        ) OR (
            name LIKE '%205%'
            AND name LIKE '%55%'
            AND name LIKE '%16%'
            AND name LIKE '%91%'
            AND name LIKE '%h%'
            AND name LIKE '%winterreifen%'
        )
    );

Неактивен

 

#4 20.09.2011 21:03:09

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Таблица HEAP как точная копия MyISAM

Это по какому количеству записей бежит ваш запрос ?

Ещё можно сменить сам подход ...
Бегите вашем запросом по всей базе и сохраняйте уже готовые  products_id,name_rating (если вы уже это не делайте)

Ещё причиной может быть, нехватка выделенной памяти для memory tables.

Неактивен

 

#5 21.09.2011 14:44:15

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Таблица HEAP как точная копия MyISAM

Спасибо, ЕвГений, за подсказки. +)))

Люди, добрые,

использую mysqltuner.pl. Реально ли добиться того, чтобы «Temporary tables created on disk» было равно 0%?

Неактивен

 

#6 21.09.2011 14:53:25

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Таблица HEAP как точная копия MyISAM

И Joins performed without indexes у меня постоянно растет, куда копать, что увеличивать? Как посмотреть, что это за запросы?

Неактивен

 

#7 22.09.2011 00:38:47

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Таблица HEAP как точная копия MyISAM

Сам список запросов выполняемых на текущий момент запросов можно посмотреть через

show full processlist
. Имхо Следует отобрать самые медленные и попробовать их соптимизировать той же расстановкой индексов.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#8 22.09.2011 10:41:07

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Таблица HEAP как точная копия MyISAM

show full processlist
показывает сам себя и один-два запроса. +)))
Temporary tables created on disk достигло 26%, блин.

Неактивен

 

#9 22.09.2011 11:27:48

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Таблица HEAP как точная копия MyISAM

Так может быть эти один два запроса и портят Вам жизнь? Насколько долго они выполняются? Вы бы показали их вместе с explain'ами wink.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 22.09.2011 12:02:45

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Таблица HEAP как точная копия MyISAM

В логе медленных запросов этих запросов нет. Значит выполняются они со скоростью до 1 сек.
И те запросы (запросы вставки), которые там появляются, по крону выполняются раз в минут 30.

Неактивен

 

Board footer

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