Size: a a a

2020 February 21

ЕТ

Евгений Тимочкин in pro.jvm
на каком железе все крутится
источник

ЕТ

Евгений Тимочкин in pro.jvm
в какой ФС
источник

ЕТ

Евгений Тимочкин in pro.jvm
и всё вот это вот
источник

N

Nikolay in pro.jvm
Это не важно. Чтение по уникальному значению. Вот у вас есть таблица пользователей. В ней поле user_id. При старте нужно по идентификатору вычитать информацию
источник

ЕТ

Евгений Тимочкин in pro.jvm
если мы про buffer cache начинаем рассуждать, то это всё (ФС, ОС и прочее) как раз таки важно
источник

N

Nikolay in pro.jvm
Меняем индекс с уникального на не уникальный и система встанет , если люди ооманутся в систему в 9 утра. Это случай из моей практике. Сейчас объясню дальше что происходит
источник

N

Nikolay in pro.jvm
Идея такая , что код в оракле написан так , что придя в блок он пины накладывает по разному т.к предполагает , что в уникальном индексе он не вернётся во второй раз в это блок в этой сессии.
источник

N

Nikolay in pro.jvm
И таких примеров могу привести много. Вот ещё. У вас есть таблица. В ней ссылка на другую таблицу.в той внешней таблице . Храним поле name.
источник

N

Nikolay in pro.jvm
Что быстрее nested loop или скалярный подзапрос, если имён порядка пары сотен ?
источник

ЕТ

Евгений Тимочкин in pro.jvm
я не знаю наверняка, но смею предположить, что nested loop в любом случае медленнее
источник

ЕТ

Евгений Тимочкин in pro.jvm
опять же всё зависит от окружения и на сколько это медленнее
источник

N

Nikolay in pro.jvm
Это гадание. Хотя вы и угадали. Но он не всегда медленнее. Но если знать. , что oracle имеет кэш скалярных подзапрос по умолчанию равный 256 значениям ( в 11 версии ). То это будет существенно быстрее.
источник

N

Nikolay in pro.jvm
И при этом есть ещё параметр скрытый ,как я помню , который регулирует размер этого кэша.
источник

N

Nikolay in pro.jvm
Вот таких примеров . Можно привести пару десятков. И это не касаясь тех случаев , когда требуется понимание как он считает кост
источник

ЕТ

Евгений Тимочкин in pro.jvm
В оракле больше 2к различных параметров, которые можно менять и это будет влиять на производительность.
источник

ЕТ

Евгений Тимочкин in pro.jvm
это уже в каждом конкретном случае/запросе надо разбираться
источник

N

Nikolay in pro.jvm
Вот пример с костом. Оракле , когда считает кост не смотрит на распределение в памяти. Условно он не знает , что закешированно , а что нет. И вот на этом тоже можно играть и тюнить
источник

ЕТ

Евгений Тимочкин in pro.jvm
тут как в Java, достаточно соблюдать простой набор правил, чтобы не создавать "бутылочные горлышки" на ровном месте (не делать запрос в БД в цикле, например) и в 85% случаев этого достаточно, чтоб Ваш софт работал достаточно шустро. Если этой производительности Вам мало, Вы расчехляете профайлер и начинаете исследовательскую работу, находите места где по-вашему мнению медленно и тюните их
источник

ЕТ

Евгений Тимочкин in pro.jvm
и это дает вам прирост в 300 наносекунд
источник

N

Nikolay in pro.jvm
А есть ещё хитрые случаи, когда приведение типов отключает индекс. Много всего.. ещё куча случаев того ,как влияет система ввода вывода. Например когда используется io_submit т.е асинхронное чтение , а когда читаем через read .
источник