Take the 2-minute tour ×
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It's 100% free, no registration required.

On our SQL Server, we have a database for each of our web apps. For reports, we use Reporting Services and all report data (including report parameters) come from stored procedures.

The stored procedures are in the same database as the data in the report. So, for example, the procs that serve the Stock reports are in the Stock database. Some reports show information from more than one database and then the proc will be in one of those source databases. The report parameters get their data from procs in an Enterprise database that has data like stores, employees etc.

This means that all reports have at least a connection to the Enterprise database and another connection to another database -- and sometimes more than that.

My question is: is there a benefit of moving the reporting procs into a separate "Reports" database. I know the benefits of moving reports onto another server and I'm not talking about that -- this would be on the same server.

Things that might affect this are:

  • Does having more than one database connection for a report, affect the speed of the report?
  • Would having the reporting proc in a separate database from the data, prevent us from using indexed views?
  • Have you found it easier / harder is administer you reports in a separate database?

Please let me know what you think.

share|improve this question

migrated from stackoverflow.com Feb 13 '12 at 21:39

This question came from our site for professional and enthusiast programmers.

add comment

5 Answers 5

up vote 8 down vote accepted

The answer is: yes, there is a benefit to doing it. Reports on on operational database will use a lot of resources and will interfere with the performance of the operational system. Remember that database performance is subject to mechanical constraints (disk heads moving back and forth and rotational latency as we wait for the right sector to make its appearance under the head). You have two broad options for a reporting strategy:

  1. Replicate your database onto another server and move the reporting sprocs onto it. Reports are run off the replicated server. This is the least effort and can re-use your existing reports and stored procedures.
  2. Build a Data Warehouse that consolidates the data from your production systems and transforms it into a form that is much friendlier for reporting. If you have a lot of ad-hoc statistical reporting that could be done acceptably from a snapshot as of 'close of business yesterday' a data warehouse might be the better approach.
share|improve this answer
    
Building a data warehouse and leveraging technologies such as OLAP where it makes sense increases your options for providing fast, reliable reporting with as little impact to the transaction processing system as possible. –  jn29098 Jul 2 '09 at 3:54
add comment

I think it much depends on the kind of SP you're running. If they are heavy and could effect other things running on the database server I'd move them. Otherwise I'd try and keep the close to the database they're actually reporting on, if find that much easier to maintain and keep track of. Just having the report close to the actual database could also affect performance but if your on a standard setup and not moving enormous amount of data that would be a tiny difference I guess.

I've also found this article useful.

share|improve this answer
add comment

I'd recommend against moving the stored procedures to another database for several reasons. From a development perspective you have to reproduce two databases each time you want to make alterations. As a consequence you will now how to synchronize the schema from the "data" database and the stored procedures from the second one with the production versions. In regards to disaster recovery and backup/restore, you now have to concern yourself with restoration of 2 database just to get your system up and running.

When testing you also have added complexities. You'll have more points of failure in respect to permissions, versions, etc. Now if you have more than 1 person working on different initiatives on the database(s) you have more spend more time coordinating efforts. Now imagine its 3 am, the system is down and you have to hunt through the permissions on all databases, and have to ensure that no one has left a function or procedure on the wrong database during development.

share|improve this answer
add comment

I'd recommend you use two databases.

Deriving reports from a 'live' database causes performance problems.

Also, since the reporting database is primarily for searches, you could customize the indexes here for better performance. (The live database would have inserts which would be affected adversely by certain indexes)

share|improve this answer
add comment

My questions are: When you move the RS and/or the DW to another server do you have an existing Database Engine on this(these) new server(s)? or are you using the original database engine?

  • So do you have to have separate database engine for all SQL servers?

Thanks, - Dom

share|improve this answer
    
Yes, we have a separate database engine on each server: db server & DW server. Since asking the question, we have stayed with our original design of keeping the reports in the same database (and therefore same server) as the source data. We also do move the data onto a data warehouse server where users access it via SQL Server Analysis Services cubes. –  Craig HB Jul 2 '09 at 9:53
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.