Возможно вы искали: 'Wraiths: Extreme A-Gra...'

May 15 2025 18:09:58
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Оптимизация SQL запросов и борьба с deadlock (postgresql sql mysql optimization tune)

Оптимизация SQL запросов и борьба с deadlock (postgresql sql mysql optimization tune)

Ключевые слова: postgresql, sql, mysql, optimization, tune, (найти похожие документы)

From: Maxim Chirkov <mc@tyumen.ru>
Newsgroups: http://forum.opennet.ru
Date: Mon, 14 Feb 2003 13:01:37 +0000 (UTC)
Subject: Оптимизация SQL запросов и борьба с deadlock

Оригинал: http://www.opennet.ru/openforum/vsluhforumID11/12.html

Ниже черновик так и не дописанной в свое время статьи, это просто
заметки на полях, на полноту и полную объективность не претендует.

Заметки по оптимизации PostgreSQL базы

--------------------------
1. Диагностика узких мест.

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

Далее, имея перед глазами текущую структуру базы и список индексов,
используем оператор "EXPLAIN [ ANALYZE ] [ VERBOSE ] запрос" для
определения причины задержек при выполнении самых медленных запросов.

Например:
EXPLAIN SELECT * FROM news ORDER BY enter_date LIMIT 100;
Limit (cost=531.60..531.85 rows=100 width=572)
-> Sort (cost=531.60..536.17 rows=1827 width=572) Sort Key: enter_date
-> Seq Scan on news (cost=0.00..164.27 rows=1827 width=572)

EXPLAIN SELECT * FROM news ORDER BY enter_date;
Sort (cost=531.60..536.17 rows=1827 width=572)
Sort Key: enter_date
-> Seq Scan on news (cost=0.00..164.27 rows=1827 width=572)

CREATE INDEX idx_news_date ON news (enter_date);
VACUUM ANALYZE;
EXPLAIN SELECT * FROM news ORDER BY enter_date;
Sort (cost=531.60..536.17 rows=1827 width=572)
Sort Key: enter_date
-> Seq Scan on news (cost=0.00..164.27 rows=1827 width=572)

EXPLAIN SELECT * FROM news ORDER BY enter_date LIMIT 100;
Limit (cost=0.00..32.66 rows=100 width=572)
-> Index Scan using idx_news_date on news (cost=0.00..596.68 rows=1827 width=572)
и т.д.


--------------------------
2. Профилактика и оптимизация часто обновляемых таблиц.

Есть простое правило: чем чаще обновляется таблица, тем чаще нужно
делать "VACUUM ANALYZE" (обновление статистики для оптимизатора).
Если UPDATE преобладает над INSERT, то полезно применять "VACUUM FREEZE"
который имеет один большой недостаток, во время его работы таблица
блокируется, проведение каких-либо операций с ней невозможно
(VACUUM ANALYZE для PostgreSQL 7.2.x и старше не требует блокировки).
Даже в простейшей таблице содержащей строковые поля, элементы которой
обновляются, допустим, раз в 5 минут (подсчет трафика на интерфейсах по
SNMP), за неделю размер файла базы вырастает на несколько порядков, а с
ним замедляется и скорость выполнения запросов, особенно по
непроиндексированным полям.

При частом обновлении (INSERT или UPDATE) использование индексов
может обернуться во вред, ведь при обновлении SQL сервер обновляет
не только данные в таблице, но и данные в индексе.

Если одновременно обновляется большое число записей, то увеличить
скорость обновления можно поместив апдейт в BEGIN WORK/COMMIT или
вообще использовать эксклюзивный лок таблицы "LOCK TABLE EXCLUSIVE".

--------------------------
3. Индексы или советы по оптимизации таблиц с высокой частотой
выборки данных.

При использовании индексов для их хранения требуется дополнительное
дисковое пространство, если проиндексированы текстовые поля, то это
пространство может быть сравнимо с размером самой таблицы. Так же
оптимизатор при обилии индексов, (особенно по нескольким полям или
пересекающихся) может "запутаться" и оптимизировать выполнение
запроса не в лучшую сторону.

- Индекс для полей используемых в "JOIN", "ORDER BY" и "GROUP BY",
"MAX()" и "MIN()" не менее важен, чем индекс для полей в "WHERE"
условиях (в PostgreSQL для "ORDER BY", MIN(), MAX() часто
используется "Seq Scan" вместо индекса, каждый случай нужно
рассматривать используя EXPLAIN, иногда использование LIMIT помогает
"выбрать" index вместо Seq Scan).

- Лучше не индексировать поля имеющие строковый тип, особенно поля
типа text.

- Индекс для LIKE и ~ (regex) полезен только когда маска не идет
вначале, т.е. при указании '%text' индекс не будет использован,
а при 'text% будет (для regex индекс используется только для
масок вида '^text...').

- Если в запросе используются функции LOWER/UPPER или ILIKE, то
индекс будет использован только если он был построен с учетом регистра,
т.е. например
"CREATE INDEX news_ilike ON news (lower(title));"

- Не следует индексировать boolean поля или числовые поля имеющие
небольшой разброс значений (флаговые поля), в данном случае индекс
больше навредит, чем окажет пользу.

- Для полей отражающих дату/время и числовых больше подходит btree
индекс, для текстовых - hash, для индексов по двум и более полям
возможно использовать только tree. btree индексы лучше подходят для
операций '<','>', сортировки, а hash для '=' и '<>'.
Если не уверен какой тип индекса использовать лучше использовать btree.
Примеры:
CREATE UNIQUE INDEX "idx_news1" on "news" ("news_id");
CREATE INDEX "idx_news2" on "news" using btree ("news_time");
CREATE UNIQUE INDEX "idx_profile" on "profile" using hash ("login");

- При создании таблицы с UNIQUE и PRIMARY KEY индексы для этих
полей создаются автоматически.

- Оптимизатору сильно помогает VACUUM ANALYZE при принятии решения
использовать ли индексы;

- На небольших таблицах, прямой перебор бывает быстрее
использования индекса, из-за лишних дисковых операций (на небольших
таблицих оптимизатор может отказаться от использоватния индексов
автоматически).

- UNIQUE индексы быстрее, чем индексы не по уникальным полям.

- Поля text в которых заведомо будет храниться большой объем данных
(например, текст статей) лучше отделить от остальных атрибутов,
таких как время, автор, раздел...
Т.е. две таблицы вместо одной:
---tab1----
ключ PRIMARY KEY
заголовок
время
автор
раздел
флаг подтверждения
--------
---tab2----
ключ UNIQUE REFERENCES tab1(ключ)
текст статьи
--------
Индексы по tab1.ключ, tab2.ключ (при UNIQUE и PRIMARY KEY будут
созданы автоматически), tab1.время.

- Поля помеченные как NOT NULL немного экономят место и исключают
лишние проверки.

- Вместо типа text лучше использовать character varying(N).

- Чем меньше размер типа, тем лучше. Т.е. где лучше использовать
int4 вместо int8, идеально когда в таблице вообще нет строковых типов и
особенно типа text.

- При наличии дублирующихся сложных и ресурсоеких запросов возможно
использование кеширования через PREPARE/EXECUTE. Имеет смысл только
в рамках текущей сессии (соединения с SQL сервером).
Для MySQL 4 актуально использование "Query Cache" (SQL_CACHE)
http://www.mysql.com/doc/ru/Query_Cache.html
946 Прочтений •  [Оптимизация SQL запросов и борьба с deadlock (postgresql sql mysql optimization tune)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Оптимизация SQL запросов и борьба с... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка