Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация работы с базой 
V
    Опции темы
Wolf1994
Дата 20.6.2009, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Есть шахматный сайт. На нём стоит база MySQL с таблицей в данный момент весом 50 Мб. Размер таблицы продолжает расти. К ней идут частые SELECT / UPDATE с активных игр. Имеет ли смысл сделать дополнительную таблицу только для текущих игр, с порядка 100-300 записями, которая будет подвергаться активным UPDATE / SELECT, а по завершении партий сбрасывать из неё данные в большую таблицу? Будет ли выигрыш в производительности / снижение нагрузки на MySQL-сервер?
PM MAIL WWW   Вверх
skyboy
Дата 20.6.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



какая структура? какие индексы? какие запросы? что показывает explain для select запросов?
или ты хочешь на абстрактный вопрос получить абстрактный ответ?
PM MAIL   Вверх
Wolf1994
Дата 20.6.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Структура:

Код

id    bigint(20)
desk    text    utf8_general_ci
chat    text    utf8_general_ci
white_talk    text    utf8_general_ci
black_talk    text    utf8_general_ci
log    text    utf8_general_ci
white_move    text    utf8_general_ci
black_move    text    utf8_general_ci
note    text    utf8_general_ci
turn    text    utf8_general_ci
player1_id    bigint(20)
player2_id    bigint(20)
player_for    bigint(20)
start_date    int(11)
end_date    int(11)
time_out    int(11)
time_game    tinyint(1)
result    text    utf8_general_ci
white_time    int(11)
black_time    int(11)
white_time_game    int(11)
black_time_game    int(11)
draw_time    int(12)
white_rock    int(11)
black_rock    int(11)
white_call    int(11)
black_call    int(11)
gross    tinyint(1)
gross_ref    text    utf8_general_ci
bet    double(6,2)
fight    tinyint(1)
fight_num    int(6)
joker    tinyint(1)
double    tinyint(1)


Индекс на 8522 элементов id.

Запросы SELECT * / UPDATE по всем полям в процессе одной партии, в основном log, white_talk, black_talk, white_move, black_move, white_time, black_time, turn.

Explain'ом никогда не пользовался и не знаю для чего он нужен.

Вопрос. Есть ли разница - работать с такой таблицей с 10+ тысячами записей или с парой сотен? И насколько большая разница, если есть.
PM MAIL WWW   Вверх
Бонифаций
Дата 22.6.2009, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Разница будет когда речь пойдет о десятках миллионов. 50М  или там 10..20 тыщщ это не тот обьем который заставляет беспокоиться....


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Wolf1994
Дата 22.6.2009, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Бонифаций, спасибо за ответ. Вопрос решён.
PM MAIL WWW   Вверх
skyboy
Дата 22.6.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



если запрос приводит к fullscan, если селективность у запросов маленькая, то разница между 50М и 10К должна быть более, чем заметна.
PM MAIL   Вверх
Wolf1994
Дата 22.6.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



skyboy, что такое полное сканирование и маленькая селективность и имеет ли это какое-то отношение к UPDATE?
PM MAIL WWW   Вверх
Бонифаций
Дата 23.6.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Цитата(skyboy @  22.6.2009,  10:03 Найти цитируемый пост)
то разница между 50М и 10К



50 мегабайт - размер данных. 10 тыщщ строк


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
skyboy
Дата 23.6.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Бонифаций, да, неправильно прочитал. но все равно, 10К, как на меня, впонле достаточно, чтоб думать про оптимальность. не?
Wolf1994, fullscan в противовес использования индекса - механизм работы с данными, при котором просматриваются все записи таблицы. когда используется индекс - работа идет с отдельной структурой, имеющей фиксированный размер одной записи и, обычно, целиком умещающейся в оперативной памяти(что критично).
селектиновсть(саксонизм от "select" - "выбирать") - степень фильтрации. чем выше селективность запроса, тем больше записей "отсеивается" при выполнении запроса. использовать или не использовать индекс - определяет оптимизатор СУБД. одним из параметров выступает предполагаемая селективность.
например, если у тебя поле типа boolean с двумя возможными значениями и на него указан индекс, то оптимизатор вполне может проигнорировать индекс и использовать fullscan - предположительно, запрос по этому полю выберет большое количество записей и работать сначала с индексом, чтоб выбрать 50% записей, а потом - работать с данными выбранных записей, может быть медленнее, чем работать с таблицей напрямую сразу(fullscan).
впрочем, могу ошибаться.
но, если что, камрады меня поправят.
PM MAIL   Вверх
Wolf1994
Дата 23.6.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Селективность моих запросов максимальная, так как все они идут по id, на котором стоит индекс.
PM MAIL WWW   Вверх
Zloxa
Дата 24.6.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(skyboy @  23.6.2009,  13:39 Найти цитируемый пост)
но, если что, камрады меня поправят


Цитата(skyboy @  23.6.2009,  13:39 Найти цитируемый пост)
чем выше селективность запроса, тем больше записей "отсеивается" при выполнении запроса

Наоборот smile)
Чем больше селективность, тем больше записей отберется. Селективность = 0 - не отбирает записей, селективность = 1 (100%) оберутся все записи ;)


Цитата(skyboy @  23.6.2009,  13:39 Найти цитируемый пост)
запрос по этому полю выберет большое количество записей и работать сначала с индексом, чтоб выбрать 50% записей, а потом - работать с данными выбранных записей, может быть медленнее, чем работать с таблицей напрямую сразу(fullscan).

С учетом того что при индексном доступе дисковые чтения идут часто но помалу(малыми порциями), а при полном сканирования реже но помногу, при полном сканировании дисковая подсистема работает более эффективно. Т.о. оценочную цифру 50 можно смело сократить до ~20. От обстоятельств конечно многое зависти но в общем случае, наверное, гдето так. smile


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
skyboy
Дата 24.6.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(Zloxa @  24.6.2009,  08:34 Найти цитируемый пост)
Наоборот

спасибо, запомню smile

Цитата(Zloxa @  24.6.2009,  08:34 Найти цитируемый пост)
при индексном доступе дисковые чтения идут часто но помалу

а как же размещение индекса целиком в памяти? smile
PM MAIL   Вверх
Zloxa
Дата 24.6.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(skyboy @  24.6.2009,  13:54 Найти цитируемый пост)
а как же размещение индекса целиком в памяти? smile 

Сорри MySQL не моя песочница, зря сюда полез.
Тут все может быть СОВСЕМ по другому.
Интересно ведь smile
НО.
Даже если индекс целиком в памяти, чтение таблицы будет все равно ведь только построчно(поблочно) можно будет производить, нет?
Вообще в в MySQL операции ввода/вывода разделяются на мультиблочные и одноблочные?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
skyboy
Дата 25.6.2009, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



к сожалению, абсолютно без понятия.
PM MAIL   Вверх
Бонифаций
Дата 26.6.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Цитата(Zloxa @  24.6.2009,  14:23 Найти цитируемый пост)
Даже если индекс целиком в памяти, чтение таблицы будет все равно ведь только построчно(поблочно) можно будет производить, нет?
Вообще в в MySQL операции ввода/вывода разделяются на мультиблочные и одноблочные? 


Это отдано на откуп engine. У каждого по своему.  Конкретно про innodb - последовательое чтение блоков там не имеет смысла (данные хранятся как листья в B-tree по первичному ключу),   
Зато там есть read-ahead чтение, это чтение асинхронное, так что в общем больших проблем не возникает. 

Да и на таких обьемах (50М) - таблица быстро окажется полностью в буфере  innodb, и все чтение будет только оттуда. На диск будут только запись.


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1182 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.