Быстродействие и разгрузка сервера, базы.

Opik

Новичок
Falc
ок, увеличим :) какие ещё "плохие" показатели? что бы тут по каждому чат не разводить, а так спасибо - сильно помог.
 

Falc

Новичок
Opik
Неплохо бы посмотреть на количество попаданий в кеш индексов, но там крутить только одну ручку key_buffer_size, чем больше тем лучше.
Еще можно посмотреть насколько хорошо используются индексы через Handler_read..., но сопоставить с ними реальные данные и запросы нельзя.
Возможно в каких-то таблицах есть не важные данные и их можно сделать HEAP.
 

Opik

Новичок
Возможно в каких-то таблицах есть не важные данные и их можно сделать HEAP.
таких тока 1 таблица и она уже давно HEAP

но там крутить только одну ручку key_buffer_size
докрутили до 15085568.
Handler_read_first 1868
Handler_read_key 867052533
Handler_read_next 64898664
Handler_read_prev 0
Handler_read_rnd 44685193
Handler_read_rnd_next 974283844
 

Falc

Новичок
Opik
>>докрутили до 15085568.
15 метров - это мало.

Если MYSQL является единственной БД на сервере и оснавная нагрузка идет именно на нее, я бы рекомендовал отдать под буфер индексов четверть а то и треть всей памяти сервера.

>>Handler_read_rnd_next 974283844
Говорит о том что достаточно много фулсканов возможно они являются следствие тех самых фулджойнов. Вобщем стоит повнимательнее посмотреть на индексы.

Да и еще я плохо понимаю в чем смысл кеширования результатов запрососв в memcache? MYSQL умеет кешировать результаты сам, причем я думаю он это делает гораздо эффективние чем алгоритм написанный на PHP.

>>понял, есть варианты решения?
1. Ускорять селекты
2. Переходить на другой тип таблиц или другую СУБД
Да и еще забыл:
3. Исключить из тяжелых селектов частообновляемые таблицы
4. Убрать апдейты :)
 

AnToXa

prodigy-одаренный ребенок
Да и еще я плохо понимаю в чем смысл кеширования результатов запрососв в memcache? MYSQL умеет кешировать результаты сам, причем я думаю он это делает гораздо эффективние чем алгоритм написанный на PHP.
кто там написан на пхп? memcache? олала, не смешите мои тапочки.

key_buffer мегов на 500 сделайте.
кстати, вроде как innodb хорошо работает именно когда куча параллельных select/update/insert.
 

fisher

накатила суть
срветую отсмотреть все наиболее частые SQL еxplainом на тему
using temporary
using filesort
ну и фулсканы конечно
разбираться долго зато возможно на порядок поднимете. крутить буфера проце конечно но если косяк в неоптимальной структуре - ничего не поможет
 

Falc

Новичок
fisher

>>срветую отсмотреть все наиболее частые SQL еxplainом на тему
>>using temporary
>>using filesort

Файл сорта у него нету:

>>Created_tmp_files 7


AnToXa
>>кто там написан на пхп? memcache? олала, не смешите мои тапочки.
Алгоритм кеширования конечно же, там вроде все ясно написано, он кстати приведет на первой странице.

>>кстати, вроде как innodb хорошо работает именно когда куча параллельных select/update/insert.
У innodb свои минусы, хотя для данного варианта плюсов может быть больше.
 

AnToXa

prodigy-одаренный ребенок
Алгоритм кеширования конечно же, там вроде все ясно написано, он кстати приведет на первой странице.
вообще-то стоит отличать application level кэширование от того, которое в базе, а то так можно вспомнить и тот кэш, который в HDD внутри.
 

Opik

Новичок
и что касательно логов для медленных запросов, как лучше поступить: оставить эту работу на саму базу - т.е "включить" данную опцию. или оставить как есть - в методе класса смотрися сколько выпонялся запрос, если более "минимума" - записываем в файл.

-~{}~ 20.09.05 01:00:

Да, и ещё - от чего зависит Created tmp disk tables. Увеличили до 300 метров. всё равно траблы(временные таблицы создаются на диске.). продолжать увеличивать. или могут быть грабли с другой стороны?

-~{}~ 20.09.05 02:07:

>>using filesort

Файл сорта у него нету
в одном месте нашел.
 

Falc

Новичок
Opik
>>"включить" данную опцию. или оставить как есть - в методе класса смотрися сколько выпонялся запрос, если более "минимума" - записываем в файл.

Одно другому не мещает. (Опцию на базе я бы включил обязательно)

>>Да, и ещё - от чего зависит Created tmp disk tables. Увеличили до 300 метров. всё равно траблы

Что имено ты увеличил?
Насколько я понимаю сюда пишутся все временные таблицы создаваемые на диске и те которые создаются пользователем и те которые создаются базой при выборках (using temporary). Так что возможно пользователем создаются временные таблицы не типа HEAP.

-~{}~ 20.09.05 10:28:

AnToXa
>>вообще-то стоит отличать application level кэширование от того, которое в базе, а то так можно вспомнить и тот кэш, который в HDD внутри.

Да отличать можно, но в данном случае простое дублирование функционала.
 

AnToXa

prodigy-одаренный ребенок
показываю.
1. база кеширует результаты запросов, приложение - данные, которые нужны, это может быть набор данных из нескольких запросов, предварительно обработанный.

2. база при изменении данных в таблице - сбрасывает кэши, приложение - само реализует логику управления и время устаревания, приложение вообще может не уходить дальше своего кэша, и не трогать базу, пока это действительно не необходимо.

3. приложение может использовать сколько угодно любых кешей, может разбрасывать данные по разным кэшам, для оптимизации или удобства, может класть в кэш данные не только из базы.

и проч и проч.
 

Opik

Новичок
У меня тормозят инсерты и упдайты на больших таблицах, какие параметры за это отвечают?

Отношение значений Key_reads/Key_read_request обычно должно быть < 0,01. Отношение Key_write/Key_write_requests примерно равно 1
выдержка из мануала. первое соотношение у меня 0.03... второе же - 9.
 

Falc

Новичок
AnToXa
Ты расписал общий случай что может приложение.
В данном случае исходя из представленого примера идет простое кеширование резултатов.

Если же у тебя есть желание показать свои знания в области кеширования, можешь написать еще пару сообщений о том что может приложение и какие выгоды будут от кеширования, я же на них отвечать не буду. Я просто показал автору топику на проблему.

-~{}~ 20.09.05 15:10:

Opik
>>выдержка из мануала. первое соотношение у меня 0.03...

0.03 - Это мало нужно увеличивать буфер ключей, тебе уже говорили.

>>второе же - 9.
Т.е. записей ключей у тебя больше чем запрсосв на запись?
 

AnToXa

prodigy-одаренный ребенок
Falc
дело в том, что тут перенос кеширования на уровень приложения выгоден на мой вкус.
поскольку обратная запись в базу далеко не всегда нужна, и может идти в кэш, а mysql сбрасывает кэш при изменении таблицы anyway, заявки на бои тоже могут вполне идти не в базу и куча моментов еще, то же распределение кешей.

плюс база не может сливать данные из кешей при джоине, даже если обе таблицы просто валяются в query cache целиком.
 
Сверху