Normalize for Performance - Why you should design normalized databases, with examples

Александр Соколов
Дата: 26.05.2006 15:10:31
Интересные выводы (http://www.jaredstill.com/downloads/normalize-for-performance.zip):
Jared Still
It is clear at this point that there really are no advantages to de-normalizing a database. The myth that denormalization helps performance has persisted for some time. Creating normalized and denormalized implementations of an ERD and comparing them side by side is very revealing. By examining only the first three normal forms we have seen the following are true:
1. SELECT performance for normalized and de-normalized schemas are comparable
2. DML performance is much better in the normalized schema than in the de-normalized schema.
3. The SQL SELECT and DML statements are simpler in a normalized schema than in a de-normalized schema.
4. Normalized schemas do not require the ancillary PL/SQL (or some other language) that is necessary to manage the data in a denormalized schema. The benefits of this are twofold
a) Response time is improved.
b) Maintenance is reduced.
5. Changes to business rules require far fewer modifications (if any) to the database in a normalized schema than in one that has been de-normalized.
Scott Tiger
Дата: 26.05.2006 15:33:49
Я всегда в таких случаях вспоминаю одну системку. Была задача организовать репликацию её данных в несколько регионов посредством обновляемых снапшотов через относительно узкий канал. В системке порядка полутора сотен таблиц, около 10-15Гб данных, достаточно большое количество изменений в единицу времени. Реплицировать в каждый регион необходимо было только данные, относящиеся к этому региону. Но вот признак (какой-то там region_id, что ли) принадлежности данных региону хранился в единственной справочной таблице, поэтому каждый (!) снапшот завязывался на эту таблицу. Число соединений, необходимых для соединения произвольно выбранной таблицы с тем самым справочником, доходило до полутора десятков, код создания каждого снапшота занимал 3-4 страницы. Работало это чудовищно, естественно, до эксплуатации не добралось (не прошло нагрузочного тестирования) - на реальном объёме данных создание набора снапшотов занимало более суток без учёта канала. Основная причина - невероятное количество логических чтений, необходимых для выполнения таких сложных запросов.

Т.ч., на мой взгляд, следует знать меру, как в нормализации, так и в денормализации, сообразно предъявляемым требованиям.

Отступать некуда
VasyakinM
Дата: 26.05.2006 15:34:01
Забавно. Обязательно проверю скрипты на выходных. Кстати раз уж кинул ссылку ты все это проверять не пробовал?
Александр Соколов
Дата: 26.05.2006 15:40:27
VasyakinM
Забавно. Обязательно проверю скрипты на выходных. Кстати раз уж кинул ссылку ты все это проверять не пробовал?
Нет, не пробовал, я дома "снес" у себя Oracle...
Q u a d r o
Дата: 27.05.2006 05:41:12
Никогда не заботился о нормализации.

Всегда заботился о оптимальной модели исходя из решаемых ею задач.

Всегда считал, что критерий оптимальности - насколько эффективно модель решает поставленные перед нею задачи на практике.

Нормализация может спасти.
Нормализация может убить.
Нормализация может не сделать ничего (потраченное впустую время).

Сетепень нормализованности модели - ох... не волнует. Покажите мне как она работает.

P.S. На каждое утверждение можно найти как примеры так и контр-примеры (если джойны так бесплатны, зачем в словаре существует кластер C_OBJ#?).

P.P.S. Выводы похожи на ROT, я против :)
Ааз
Дата: 27.05.2006 07:53:47
VasyakinM
Кстати раз уж кинул ссылку ты все это проверять не пробовал?
Интересно, юноша, сколько лет вам было в 1984 году, когда Александр Петрович Соколов начал возюкаться с Oracle4? Знаете ли вы, кто предложил кодировку iso-5? И сколько оракловых систем он успел "поператрахивать" ((с) Лукашенко) к моменту, когда вы закончили школу?
Александр Соколов
Дата: 27.05.2006 14:56:46
Подливаю масло в огонь… Продолжая просмотр материалов симпозиума Hotsos 2006, натолкнулся на интересное (для меня) выступление Redo internals and tuning by redo reduction, а в нем на этот абзац:
автор
It is a common practice among few third party applications to denormalize the data justifying performance reasons. But this design can lead to increase in redo size. Decision to denormalize a table should be carefully analyzed, considering all the issues, including redo size.
This test case proves that how a denormalized column can increase redo size.
Table structure Redo size (Heap)
Item_desc column not normalized 7 822 572
Item_desc column normalized 5 801 452
andrey_anonymous
Дата: 27.05.2006 20:05:11
Александр Соколов
Подливаю масло в огонь…

Александр, это не масло.
Это скорее виноград из известной басни г-на Крылова.
andrey_anonymous
Дата: 27.05.2006 20:10:46
Ааз
VasyakinM
Кстати раз уж кинул ссылку ты все это проверять не пробовал?
Интересно, юноша, сколько лет вам было в 1984 году, когда Александр Петрович Соколов...

Ааз, зачем уподобляться Бурлесону (когда он мерялся с Кайтом размером credentials)? ;)

Вопрос вполне разумный - проверял или нет...
Из оригинального поста Александра Петровича Соколова не очень понятно - была ли ссылка приглашением к дискуссии или актом просветительской деятельности.
Если первое, то неплохо бы высказать свои соображения
Во втором случае просто должен был попробовать...
Ааз
Дата: 27.05.2006 23:43:38
andrey_anonymous
Ааз, зачем уподобляться Бурлесону (когда он мерялся с Кайтом размером credentials)? ;)
Тезка, я же ж вроде как выделил "ты", а не тестирование? Сорри, если был не правильно понят.

Всего