Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 опрос: обновление статистики путем count(*) в разных серверах  [new]
fedd
Member

Откуда: Москва
Сообщений: 33999
привет,

хотел бы уточнить, что во многих серверах при выполнении запроса select count(*) from table обновляется статистика по всем индексам в этой таблице. так это или нет?

особо интересуют mysql, postgres, firebird, db2, derby, h2, a также mssql и oracle.

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

спасибо
6 апр 10, 11:21    [8584279]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
никто не парится и ты не парься
6 апр 10, 11:27    [8584348]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30242
firebird - нет, статистика по индексам в firebird и interbase обновляется только по set statistics <index_name>.
6 апр 10, 11:27    [8584350]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
hvlad
Member

Откуда:
Сообщений: 11551
fedd
хотел бы уточнить, что во многих серверах при выполнении запроса select count(*) from table обновляется статистика по всем индексам в этой таблице. так это или нет?
Я сильно сомневаюсь, что при чтении таблицы (или минимального покрывающего индекса) кто-то будет читать ещё и все остальные индексы.
Разве что читается действительно таблица, а не индекс, и собирается статистика только по значениям полей.
6 апр 10, 11:38    [8584469]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
fedd
Member

Откуда: Москва
Сообщений: 33999
kdv
firebird - нет, статистика по индексам в firebird и interbase обновляется только по set statistics <index_name>.
спасибо!

all: если несложно, для других серверов, если они уже у вас в памяти или недолго искать, можно тоже написать команды обновления статистики (лучше не всей базы, а потаблично/поиндексно)
6 апр 10, 11:40    [8584489]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
правильный емайл
Member

Откуда:
Сообщений: 1565
в оракел точно не так
6 апр 10, 11:41    [8584509]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
Ихтиандр
Member

Откуда: оттуда
Сообщений: 76561
с фигали загуляли?
ИМХО, бред в приложении к любой нормальной СУБД.
6 апр 10, 11:54    [8584664]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
tru55
Member

Откуда: СПб
Сообщений: 19788
В Oracle статистика собирается с пом. пакета dbms_stats (и по таблицам, и по индексам)
6 апр 10, 11:55    [8584669]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
fedd
Member

Откуда: Москва
Сообщений: 33999
Ихтиандр
с фигали загуляли?
ИМХО, бред в приложении к любой нормальной СУБД.
я уже понял, и собираю команды для обновления статистики
6 апр 10, 11:59    [8584725]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
LeXa NalBat
Member

Откуда: Москва
Сообщений: 2892
в постгресе ANALYZE
6 апр 10, 12:10    [8584815]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
tru55
Member

Откуда: СПб
Сообщений: 19788
fedd
я уже понял, и собираю команды для обновления статистики


Как правило, обновлять статистику на сервере - это задача DBA, а не приложения.
А DBA это запускает каким-нибудь джобом, только в редких случаях ручками...
Кроме того, критичность сбора статистики на различных серверах м.б. различной. Например, Oracle считает, что если в таблице изменилось меньше 10% данных, то статистика вполне пригодна. Тут ведь дело еще упирается в призводительность, сбор статистики жрет ресурсы сервера. Так что, насчет серверо-независимости подобной вещи - сомнительно...
6 апр 10, 12:11    [8584832]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3155
В MS SQL обновляется при помощи оператора UPDATE STATISTICS.
6 апр 10, 12:24    [8584955]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Локшин Марк
В MS SQL обновляется при помощи оператора UPDATE STATISTICS.
Если чтоит параметр AUTO_UPDATE_STATISTICS, то обновляется при выполнении запроса в том случае, если сервер сочтёт её устаревшей (синхронно или асинхронно)
http://msdn.microsoft.com/ru-ru/library/ms190397.aspx
6 апр 10, 14:02    [8585854]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
tru55
В Oracle статистика собирается с пом. пакета dbms_stats (и по таблицам, и по индексам)
Тут вроде написано, что в Оракле тоже автоматически собирается по умолчанию.
http://download.oracle.com/docs/cd/E11882_01/server.112/e10595/tables005.htm#i1006473
6 апр 10, 14:11    [8585949]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
tru55
Member

Откуда: СПб
Сообщений: 19788
Le Peace
tru55
В Oracle статистика собирается с пом. пакета dbms_stats (и по таблицам, и по индексам)
Тут вроде написано, что в Оракле тоже автоматически собирается по умолчанию.


Просто при создании базы через DBCA (т.е. через визард), начиная с Ora 10, автоматом создается job, который отвечает за сбор статистики по всей БД (раньше этот job приходилось создавать ручками).
Однако это все относительно:
- база может создаваться ручками
- DBA может из тех или иных соображений отключить этот job, и/или сделать свой (например, некоторые места в OeBS плохо работают при собранной статистике)
- job работает, как правило, ночью (в момент наименьшей загрузки БД). Если мы днем произведем какую-нибудь массовую заливку, то надо будет запустить сбор статистики вручную (по всей или части БД), иначе она до след. ночи будет неактуальна
И т.д.
6 апр 10, 14:19    [8586035]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
tru55,

то есть одним махом собирается статистика по всей бд?
То есть если статистику нужно обновлять чаще либо нет времени наименьшей нагрузки, то автоматический сбор уже не получится сделать?
6 апр 10, 14:23    [8586087]     Ответить | Цитировать Сообщить модератору
 Re: опрос: обновление статистики путем count(*) в разных серверах  [new]
tru55
Member

Откуда: СПб
Сообщений: 19788
Le Peace

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


Угу, умалчиваемый job такой, т.е. статистика по всей БД. Другое дело, что за время работы БД отслеживаются изменения и статистика собирается только по тем таблицам, где с последнего сбора изменилось больше 10% данных (до Ora 10 такой мониторинг включался вручную).
Но если мы хотим по разным частям БД собирать статистику в разное время, значит мы уже должны написать запуск нескольких job в разное время (хотя написание тут не сильно большое, ибо пакет для сбора статистики все равно 1 - dbms_stats)
6 апр 10, 14:30    [8586191]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить