Архитектура системы отчетов для повышения производительности

У нас есть продукт, работающий под управлением Sql Server Express 2005 и использующий в основном ASP.NET. В базе данных около 200 таблиц, некоторые из которых (4 или 5) могут расти с 300 до 5000 строк в день и хранить историю 5 лет, поэтому они могут увеличиваться до 10 миллионов строк.
Мы создали платформа отчетности, которая позволяет клиентам создавать отчеты на основе шаблонов, полей и фильтров.
Мы сталкиваемся с проблемами производительности почти с самого начала, мы стараемся, чтобы отчеты отображались менее 10 секунд, но некоторые из них увеличиваются до 25 секунд (особенно на этих клиентов с долгой историей).
Мы продолжаем проверять индексы и пытаемся улучшить запросы, но у нас возникает ощущение, что мы можем сделать лишь так много. Конечно, тот факт, что запросы генерируются динамически, не помогает в оптимизации. Мы также добавили несколько таблиц, в которых хранятся избыточные данные, но затем у нас возникла дополнительная проблема с поддержанием этих данных в актуальном состоянии, а также в Sql Express есть ограничение на размер баз данных.
Теперь мы сталкиваемся с точкой, в которой мы должны решить, хотим ли мы отказаться от отчетов в реальном времени или, может быть, сократить историю, чтобы иметь лучшую производительность.
Я хотел бы спросить, какой подход рекомендуется для этого типа систем.
Кроме того, стоит ли нам искать сторонние инструменты / платформы? Я знаю, что OLAP может быть вариантом, но можем ли мы заставить его работать на Sql Server Express или, по крайней мере, с лицензией, которая достаточно дешевая, чтобы распространять ее на тысячи развертываний?

Спасибо


person pauloya    schedule 30.03.2010    source источник


Ответы (2)


Мы сталкиваемся с проблемами производительности практически с самого начала

До того, как ваши столы стали большими? Это заставляет меня думать, что у вас есть основные проблемы в вашем приложении для создания отчетов или SQL-запросах. Это время ожидания происходит только с одним пользователем в системе?

Вы использовали трассировку SQL для документирования длительных запросов и их исправления? Как вы приступили к добавлению индексов?

Существует набор OLAP с открытым исходным кодом - http://www.pentaho.com/index.php Но я не могу ручаться за простоту использования или производительность.

person Sam    schedule 30.03.2010
comment
Да, к нашему приложению чаще всего обращается 1 человек. Мы несколько раз работали над улучшением запросов, анализировали план выполнения и добавляли индексы. Мы улучшили многие запросы, но для некоторых отчетов невозможно сократить количество запросов до 1 секунды. - person pauloya; 30.03.2010
comment
Чтобы иметь возможность динамически строить запросы, мы используем представления, которые собирают поля, могут ли они поступать непосредственно из таблиц или из преобразований данных посредством вычислений или группирования. Я предполагаю, что это мешает полной гибкости при построении запросов, но даже если мы попытаемся создать другой запрос вручную для достижения того же результата, похоже, что производительность не станет намного лучше. - person pauloya; 30.03.2010
comment
Наши таблицы с самого начала были большими, потому что данные были перенесены из предыдущей системы. - person pauloya; 30.03.2010
comment
В настоящее время мы работаем над оптимизацией запросов, и работа становится быстрее, либо за счет изменения запросов, либо за счет добавления индексов. Но все же я чувствую, что этот подход сложен и дорог (по времени и ресурсам), мне интересно, насколько проще и быстрее все было бы, если бы у нас было больше OLAP-подобной системы. - person pauloya; 07.04.2010
comment
OLAP будет совершенно другой инициативой, даже настройка простой займет довольно много времени - но, возможно, в долгосрочной перспективе это лучше. Вы изучали варианты уменьшения количества подключений? technet.microsoft.com/en-us/library/cc917715.aspx. Это то, что Дэйв Сверски имеет в виду в теории - индексированное представление может позволить вам добавить это без фактического добавления денормализованных таблиц. - person Sam; 03.05.2011
comment
Похоже, что индексированные представления недоступны в экспрессе, поэтому, если вы хотите сделать такую ​​вещь, вам нужно будет выполнить соединения и сохранить результаты в таблице, что может быть большой тратой места. - person Sam; 03.05.2011

Выполнение запроса в подобном случае можно улучшить, сохранив денормализованную версию вашей базы данных. SQL Express не предлагает много возможностей для бизнес-аналитики «из коробки», поэтому лучший вариант (в рамках ограничений SQL Express) - разработать решение вручную.

Это означает разработку денормализованной версии вашей базы данных, в которую вы экспортируете данные для отчетов. Имейте в виду, что денормализованные базы данных занимают намного больше места. Здесь есть книга, посвященная проектированию хранилищ данных. .

Вам также следует изучить варианты архитектуры, которые позволят централизовать данные в полнофункциональной СУБД.

person Dave Swersky    schedule 30.03.2010