Hi everyone Has anyone tried to implement a report queue to improve system performances ? Just like a shared network printer has a queue, I am thinking about the same concept to manage heavy reports. If report A and report B are very processing intensive and need to work on the same data, the total running time to finish report A + report B is smaller if they are ran one after the other, no ? Because of our business cycle, many of our Navision Attain 3.7 users need to launch very heavy reports on the same two or three days of the months. Our system (which works fine with 150 concurrent users during the rest of the month) obviously becomes extremely slow. When our system becomes slow, everyone has to wait without knowing how long to wait. Managing users expectations is of course another of my goals. A nicely implemented queue could show them which/whose reports is waiting in the queue in front of theirs. A further raffinement could allow a finetuning: how many reports can actually start running in parallel. Just one during busy times, more during calmer days… We just started our reflexion, wondering if running the scheduler on a separate PC might the be the way to manage the queue. Your ideas or suggestions would be most welcome. Thanks a lot ! JF (Milan, Italy)
I made something as “Scheduler module” which is able to postpone processing of reports (user click OK, is returned back into client, and the NAS will run the report in serial order…). There are only small changes in the report, which are made easy. For the user there is no change, he run the report, can select if he want to run directly or in the background (may be changed to set time when it can be processed)… If you want to do something like this, you need this (not depending on some particular report): 1) Table for info about each Job (Scheduler Job Table) 2) Some tables which are able to save parameters of reports for each Sched. Job (Scheduler Job Parameters) Parameters can be: a) Date b) Time c) DateTime d) Code e) Text f) Option g) Decimal h) Integer i) Dateformula j) Table Filter (filters entered on Tab for DataItem of the report) 3) Some library which is able to save this parameters from the report 4) Some library which is able to set this parameters back to the report 5) Function to know, if you are running phase of execution or phase of entering parameters… 6) Scheduler which will execute the jobs… There are examples of my functions used by me:
SetWorkMode IsWorkMode SetObject ParamRec ParamBool ParamDate ParamTime ParamDateTime ParamCode ParamText ParamOption ParamInteger ParamDecimal Done CreateNewJob ParamExist SetProcessInfo ParamXXX Functions in WorkMode set parameters in report, in nonWorkMode are saving the parameters into tables… This is only short description for you if you are thinking about making such a scheduler… [Ugh][8D]
Hi, do you have a backupsystem for the database-server? Are the “very heavy reports” reports that do a last month reporting? then you can do a copy from your “life”-system to your backup-system and the users can do the reporting on the backup-system and will not slow down the life-system. Are the users always call the reports with the same parameters on the request form? perhaps you can use the “Job Sheduler” in Service-Menu? br Josef Metz
Thank you Kamil & Josef for your fast answers and advizes ! We are already copying the DB to a dedicated PC from which some of the heavy reports can be launched. Unfortunately most of our reports need to run from our main system since data is constantly modified. Reports are often used to diagnose the quality of the data inserted and are ran multiple times until the expected results are confirmed. Looking into a scheduler/queuing based solution seems the right approach.