Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
многопользовательская работа с очень большой таблицей
|
|||
|---|---|---|---|
|
#18+
Приветствую, господа. Вопрос по теории построения БД. И по практике :) Postgresql 8.2. Сервер: 2 Xeon'а, 4 Гига памяти. RedHat AS 4. Предыстория. Было у нас куча (около 1000) таблиц, абсолютно одинаковых, содержащих сходные данные, но относящиестя к разным сущностям нашего программного комплекса. Общую статистику получить было почти невозможно - надо было проходить последовательно по всем таблицам и объединять результаты анализа каждой в единое целое. Более того - какие-то необходимые модификации, заставляли нас опять проходить по всем таблицам и модифицировать их по одной. Последней каплей стало возникшее требование добавлять в таблицу запись только если значение одного из полей ее не встречается ни в одной из остальных таблиц. И я решил номализовать БД. Объединил все данные в одну таблицу с добавлением поля, указывающего, какой из сущностей принадлежит запись. И тут все начало страшно тормозить. Сразу скажу, с индексами там все нормально - есть индексы по всем полям, которые упоминаются в запросах в WHERE. Опишу таблицу: она содержит 6 полей - счетчик - primary key, 2 int, 3 text. Размер сейчас - порядка 50 млн записей. БД настроена оптимально - я в этом разбираюсь. С таблицей этой непрерывно и постоянно работают 10 клиентов - выбирают, добавляют, изменяют записи. Друг другу вроде не должны мешать, т.к. каждый работает только со своими записями. Тем не менее - торможение жуткое. Что можно с этим сделать? Или я вообще зря нормализовал БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 22:30 |
|
||
|
многопользовательская работа с очень большой таблицей
|
|||
|---|---|---|---|
|
#18+
Думаю не зря, но индексы придется поднастроить под запросы (я думаю). А тормоза с выборкой или изменением данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 09:46 |
|
||
|
многопользовательская работа с очень большой таблицей
|
|||
|---|---|---|---|
|
#18+
> Сервер: 2 Xeon'а, 4 Гига памяти. RedHat AS 4. Дисковая? ps auxr? vmstat 3? iostat? > И тут все начало страшно тормозить. Что именно "все"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 10:49 |
|
||
|
многопользовательская работа с очень большой таблицей
|
|||
|---|---|---|---|
|
#18+
tier.ruСразу скажу, с индексами там все нормально - есть индексы по всем полям, которые упоминаются в запросах в WHERE. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 10:55 |
|
||
|
многопользовательская работа с очень большой таблицей
|
|||
|---|---|---|---|
|
#18+
Структуру таблицы и тормозной запрос приведите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 11:07 |
|
||
|
многопользовательская работа с очень большой таблицей
|
|||
|---|---|---|---|
|
#18+
пример тормозного запроса: update our_big_table set field1 = 2, tdate = dafault where id in (select id from our_big_table where field1 = 1 or (field1 = 2 and (tdate + interval '1 day') < NOW()) ORDER BY tdate DESC LIMIT 2000) Где: id - serial, primary key tdate - timestamp without time zone, default now() field1 - integer по двум последним есть индексы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 12:31 |
|
||
|
многопользовательская работа с очень большой таблицей
|
|||
|---|---|---|---|
|
#18+
select count(*) from our_big_table; select count(*) from our_big_table where field1 = 1; select count(*) from our_big_table where field1 = 2; select count(*) from our_big_table where field1 = 2 and tdate < now() - interval '1 day'; explain analyze тормозного запроса; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 12:59 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=308&tid=2005891]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 317ms |

| 0 / 0 |
