Автор Тема: Долго висит статус Sending data  (Прочитано 10139 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« : 21 Августа 2006, 17:14:42 »
Mysql 4.1.20

Есть таблица


CREATE TABLE 
`click_words_date` (
 `
datedate NOT NULL default \'0000-00-00\',
 `id_word` int(10) unsigned NOT NULL default \'0\',
 `searches` mediumint(8) unsigned NOT NULL default \'0\',
 `clicks` mediumint(8) unsigned NOT NULL default \'0\',
  KEY `date` (`date`,`id_word`),
  KEY `date_2` (`date`,`clicks`,`searches`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


Кол-во строк в таблице около 9М

Выполняем запрос

SELECT id_word
searchesclicks FROM click_words_date
WHERE date 
= \'2006-08-20\'
ORDER BY clicks DESC , searches DESC 
LIMIT 0,100


Все ок выполняеться почти мгновенно
EXPLAIN говорит

select_type
SIMPLE
type
ref
key
date_2
key_len
3
ref
: const
rows1278673
Extra
Using where


Но!

SELECT id_word
searchesclicks FROM click_words_date
WHERE date 
= \'2006-08-20\'
ORDER BY clicks DESC , searches DESC 
LIMIT 119910, 100

Выполняеться почти 20сек

Чем дальше "листаешь" от первой страницы тем дольше выполняется запрос :(

Это так и должно быть или это из-за причудливых изгибом моих рук? :)

На сервере работает еще innoDB, о самом сервере могу сказать только что это дедик с 3Г памяти :) И не могу сказать что я очень уверен что сервер(mySQL) настроен оптимально :) Если нужно могу выложить избранные моменты из результата работы show variables или show status :)
« Последнее редактирование: 21 Августа 2006, 17:25:55 от Alone »

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« Ответ #1 : 22 Августа 2006, 09:33:01 »
Ну, учитывая то что MySQL читает больше миллиона записей из 9, то 20 секунд это не так что бы совсем ужасно.
Sending data может долго висеть если у тебя проблемы с сетью, с диском и также этот статус показывается когда на самом деле запрос еще выполняется :)
Попробуй создать индекс на (`date`,`clicks`,`searches`, `id_word`).
Тогда MySQL будет использовать только индексный файл и не будет трогать файл данных.

Попробуй увеличить также sort_buffer_size и read_rnd_buffer_size.
На Машине Тьюринга далеко не уедешь.

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« Ответ #2 : 22 Августа 2006, 10:40:58 »
Спасибо, попробую поиграться с памятью :)

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« Ответ #3 : 23 Августа 2006, 17:02:09 »
Совсем не помогло :(

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« Ответ #4 : 23 Августа 2006, 19:13:28 »
а что теперь explain показывает?
На Машине Тьюринга далеко не уедешь.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« Ответ #5 : 23 Августа 2006, 19:17:12 »
странно что он использует только часть индекса, что по date.
На Машине Тьюринга далеко не уедешь.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« Ответ #6 : 23 Августа 2006, 19:19:13 »
Попробуй сделать еще такой финт ушами:

SELECT id_word, searches, clicks, date FROM click_words_date
WHERE date = \'2006-08-20\'
ORDER BY date DESC, clicks DESC , searches DESC
LIMIT 119910, 100

и посмотри что тебе EXPLAIN скажет.
На Машине Тьюринга далеко не уедешь.

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« Ответ #7 : 24 Августа 2006, 11:07:12 »
Да в общем говорит то же самое :(
изменение индексов, настроек не к чему не привела :(
Блин, загадка природы, исполняет автор...

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Долго висит статус Sending data
« Ответ #8 : 24 Августа 2006, 13:05:21 »
кстати, а если ты выполняешь запрос несколько раз, то у тебя он все время так медленно выполняется?

У меня просто похожий по структуре запрос на 30-миллионной табличке, где он сканирует пол-миллиона строк выполняется за 2-4 секунды первый раз (пока MySQL грузит индексы в кэш) и порядка 0.15-0.25 секунды последующие разы.

Это на моей домашней машинке, поэтому говорить о каких-то мощностях самого сервера не приходится.

Возможно у вас загружен key_buffer_size.
На Машине Тьюринга далеко не уедешь.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28