powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Использование памяти
25 сообщений из 56, страница 2 из 3
Использование памяти
    #39473429
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДТаким способом ты отключил использование "плохого" индекса по station_id . .
Эээ... а можно для нубов: чем он плохой и как вообще определить что индекс - плохой?
...
Рейтинг: 0 / 0
Использование памяти
    #39473432
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

"плохой" индекс - индекс с плохой избирательностью (селективностью), т.е. большим количеством дубликатов ключей. Классический пример - в таблице 1000 записей, по столбцу построен индекс, в столбце 2 значения (м и ж, 1 и 2, и т.д.). Одно значение ключа - 990 записей, другое - 10. Поиск по первому значению приводит к чтению почти всех страниц с диска, т.е. к лишним операциям ввода-вывода, т.к. все равно выберется 990 записей (почти все). Поиск на второе значение - очень выгоден, т.к. выберет всего 10 записей.
Но оптимизатор не знает, поиск какого значения будет производиться, поэтому индекс в плане скорее всего будет использоваться.
Так что тут все зависит от ситуации, поиск каких значений идет по индексу, и сколько их.

Еще "качество" индекса, если он по нескольким столбцам, зависит от порядка столбцов в индексе, и их селективности.

В общем, создавать индексы вручную (кроме ПК и ФК) нужно только если они явно ускоряют производительность конкретного запроса. Бывает что разработчик наоборот, сначала нафигачит индексов на все случаи жизни, а потом удивляется почему "убирание" индекса ускоряет запрос.
...
Рейтинг: 0 / 0
Использование памяти
    #39473459
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, спасибо.
...
Рейтинг: 0 / 0
Использование памяти
    #39473469
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvРоман ЯнковскийЧто значит х.з.? Чтобы сортировать по полю нужно обязательно добавлять его в select? Это какие-то новости sql?
я понимаю, что бывает всякая специфика, и конкретная реализация SQL не запрещает, но вот например - вижу я в результате запроса фамилии людей. Которые идут в каком-то порядке. Каком - я не вижу. А они - сюрприз! - отсортированы по номеру паспорта. Или по дате рождения. То есть, оценить, по какому критерию конкретные записи идут одна за другой, я не могу.

Этот конкретный запрос используется в хранимой процедуре, где важно обрабатывать записи в хронологическом порядке. При этом сама дата не важна. Только порядок.
...
Рейтинг: 0 / 0
Использование памяти
    #39473471
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и подумал сначала, что этот трюк отключает индекс. Но потом я вообще задисейблил этот индекс и быстрее не стало. Поэтому засомневался. А потом уже после того как запостил вопрос, увидел, что на это поле есть еще и внешний ключ и в когда я дисейблю индекс, в план попадает он. Индекс я прибить могу, нафиг он нужен, а вот внешний ключ отключать стремно как-то.
...
Рейтинг: 0 / 0
Использование памяти
    #39473503
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvalekcvp,

"плохой" индекс - индекс с плохой избирательностью (селективностью), т.е. большим количеством дубликатов ключей. Классический пример - в таблице 1000 записей, по столбцу построен индекс, в столбце 2 значения (м и ж, 1 и 2, и т.д.). Одно значение ключа - 990 записей, другое - 10. Поиск по первому значению приводит к чтению почти всех страниц с диска, т.е. к лишним операциям ввода-вывода, т.к. все равно выберется 990 записей (почти все). Поиск на второе значение - очень выгоден, т.к. выберет всего 10 записей.
Но оптимизатор не знает, поиск какого значения будет производиться, поэтому индекс в плане скорее всего будет использоваться.
Так что тут все зависит от ситуации, поиск каких значений идет по индексу, и сколько их..

Это кстати не объясняет почему с индексом значительно медленнее, чем без индекса.
...
Рейтинг: 0 / 0
Использование памяти
    #39473504
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ЯнковскийIvan_Pisarevskyпропущено...

напиши and i.station_id+0 = 50

Стало выполнятся за 0.05сек. Это что за магия такая? :)
Это отсутствие реального оптимизатора в ФБ
...
Рейтинг: 0 / 0
Использование памяти
    #39473506
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал индекс по двум полям, нормально стало. Спасибо огромное!

Но это не объясняет мое изначальное недоумение. Ну допустим запрос плохой и индексы не те. Так пусть файрберд жрет ресурсы, чтоб его выполнить. Эти таблицы все целиком 20 раз в память поместятся, оно тупым перебором должно было быстрее работать.
...
Рейтинг: 0 / 0
Использование памяти
    #39473507
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай еще старую медленную статистику запосчу. Завтра.
Извиняюсь за много постов.
...
Рейтинг: 0 / 0
Использование памяти
    #39473528
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще. Такое вот:

Код: sql
1.
2.
3.
4.
5.
select count(*)
        from sts_availability_history_entry e
        left join sts_availability_history_item i on i.entry_id = e.id and i.station_id = 50
        where e.created_utc between cast('1-May-2017' as date) and cast('2-May-2017' as date)  
          and extract(hour from e.created_utc) between 4 and 21



> 1080

Код: sql
1.
2.
3.
4.
5.
select count(*)
        from sts_availability_history_entry e
        left join sts_availability_history_item i on i.entry_id = e.id -- and i.station_id = 50
        where e.created_utc between cast('1-May-2017' as date) and cast('2-May-2017' as date)  
          and extract(hour from e.created_utc) between 4 and 21



> 20964

Точно-точно у индекса по select_id плохая селективность?
...
Рейтинг: 0 / 0
Использование памяти
    #39473547
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ЯнковскийТочно-точно у индекса по select_id плохая селективность?Планы и статистику выполнения мы увидим ?
...
Рейтинг: 0 / 0
Использование памяти
    #39473555
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ЯнковскийНу допустим запрос плохой и индексы не те. Так пусть файрберд жрет ресурсы, чтоб его выполнить. Эти таблицы все целиком 20 раз в память поместятся, оно тупым перебором должно было быстрее работать.

Ты всерьез полагаешь, что он с диска каждый раз нужную страницу читает, потому медленно работает ? Сдается мне, что к моменту выполнения самого запроса сколько можно страниц уже прочитано или они читаются по мере надобности и толку от того, что они будут прочитаны заранее будет немного.
...
Рейтинг: 0 / 0
Использование памяти
    #39473560
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ЯнковскийТак пусть файрберд жрет ресурсы, чтоб его выполнить.
судя по этой фразе, вы не читали статью про железо и фб, которую я вам дал.
...
Рейтинг: 0 / 0
Использование памяти
    #39473563
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С SET PLAN ON/SET STATS ON в ISQL получил такие вещи. Отключил новый индекс по двум полям для наглядности.

План (который в принципе уже был в начале):

PLAN JOIN (E ORDER I_STS_AVAILABILITY_HIST_EN_IDX1 INDEX (I_STS_AVAIL_HIST_ENTRY_I2), I INDEX (FK_STS_AVAILAB_STS_AVAILAB, FK_STS_AVAILABI_STA_STATION))

Статистика:

Current memory = 453891000
Delta memory = 3899800
Max memory = 992638888
Elapsed time= 2.842 sec
Buffers = 50000
Reads = 39023
Writes = 313
Fetches = 664352
...
Рейтинг: 0 / 0
Использование памяти
    #39473568
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То же самое с включенным индексом по двум полям.

Current memory = 456675728
Delta memory = 6607232
Max memory = 992638888
Elapsed time= 1.250 sec
Buffers = 50000
Reads = 13818
Writes = 184
Fetches = 337405
...
Рейтинг: 0 / 0
Использование памяти
    #39473571
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ЯнковскийBuffers = 50000
Reads = 13818
если суперсервер, и 3.0, то можно увеличивать кэш до 200000 тысяч, только тогда надо не забыть и
FileSystemCacheThreshold
тогда увеличить, например до 300к.

база какого размера, какой размер страницы, и сколько RAM на сервере?
...
Рейтинг: 0 / 0
Использование памяти
    #39473587
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ЯнковскийТо же самое с включенным индексом по двум полям.Ты серьёзно считаешь, что кто-то стоит у тебя за спиной и видит эти индексы и поля ? И где план запроса ?
Кроме того, желательно показывать детальную (потабличную) статистику выполнения, IBE в помощь.
И DDL всех затронутых объектов (таблиц и индексов).
...
Рейтинг: 0 / 0
Использование памяти
    #39473588
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvесли суперсервер, и 3.0, то можно увеличивать кэш до 200000 тысячЗачем ? Reads и так меньше Buffers, там всё и так попадает в кеш.
Есс-но, не до первого выполнения запроса
...
Рейтинг: 0 / 0
Использование памяти
    #39473609
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

reads - это то что не влезло в кэш. Если бы оно влезало, reads было бы 0, при повторном выполнении запроса, разумеется. Но вероятно, раз приведены "с индексом и без", то скорее всего запросы можно считать повторными, и видимо, не влезает.
...
Рейтинг: 0 / 0
Использование памяти
    #39473624
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladРоман ЯнковскийТо же самое с включенным индексом по двум полям.Ты серьёзно считаешь, что кто-то стоит у тебя за спиной и видит эти индексы и поля ?

Я считаю, что отвечающие читали тему. Мне предложили сделать индекс по условию соединения и я его сделал.

hvladИ где план запроса ?

Не будет плана запроса. Третий раз его постить наверно уже лишнее.
...
Рейтинг: 0 / 0
Использование памяти
    #39473625
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

спасибо, попробую сегодня
...
Рейтинг: 0 / 0
Использование памяти
    #39473633
Роман Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot kdv]Роман Янковскийбаза какого размера, какой размер страницы, и сколько RAM на сервере?

база 7.5гб (хм, подросла с тех пор, как я в последний раз смотрел, но ram можно увеличить, если это поможет)
ram 16gb
страница 8192
...
Рейтинг: 0 / 0
Использование памяти
    #39473634
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ЯнковскийНе будет плана запроса. Третий раз его постить наверно уже лишнее.Весьма глупое поведение. Мне эти планы, наверное, не очень нужны, так что я как-нибудь переживу этот отказ :)

Подскажу: у запросов с и без использования индексов разные планы.
...
Рейтинг: 0 / 0
Использование памяти
    #39473635
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvreads - это то что не влезло в кэшСерьёзно ? :)

kdvскорее всего запросы можно считать повторнымиСлишком много предположений и слишком мало надежды получить минимально необходимую инф-цию
...
Рейтинг: 0 / 0
Использование памяти
    #39473636
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Янковскийбаза 7.5гб (хм, подросла с тех пор, как я в последний раз смотрел, но ram можно увеличить, если это поможет)
статью читайте же. Если база 7 гиг, а памяти 16, вероятно что база уже в памяти. RAMMAP это показывает (на двух последних закладках). Понятно, что смотреть надо при интенсивной работе, а не при выполнении одного тестового запроса.

Дальше, при странице 8к и 50000 страниц кэша кэш получается 400 мегабайт. Так что его можно спокойно увеличить раза в 4, как я и предложил (если ФБ 64битный. Если 32битный, то лучше не надо).
Потом, во время работы вы можете посмотреть, сколько занимает процесс firebird.exe. Вы же не написали - сколько. Вы сообщили "использует память очень экономично".
И 7 гиг 3 раза в 16 гиг не влезет. Влезет только 2 раза. В общем, читайте статью и настраивайте. Там все есть - и рекомендации, и формулы, надо только прочитать внимательно :-)
...
Рейтинг: 0 / 0
25 сообщений из 56, страница 2 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Использование памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]