views:

37

answers:

2

Hi WE use a third party report tool. Report tool uses active-x. At first we generate and run a query accırding to filters, then one report file is created which inculdes the data (result of the query). Then client downloads the report file. But file written operation is a big problem for us. What can we do? Taking file written operations into another application and taking this application into another application pool can be a solution? Do you have any suggestion? And how the web server operates,runs? For example there are 100 clients which connects to web server and they are trying to run some reports. So web server must create 100 files for these clients. So if a report data is very huge and do others wait for its completion?

A: 

Your problem is not very clear. You said writing file is a big problem, what do you mean by that? Is it slow or what?

Is your application designed to serve one client at a time? If not then why you saying others wait for its completion?

I assume your application can serve multiple clients at a time. If the load is high writing of file will be affected as IO will slow down. You need to load balance the application where load gets divided between the instances and that way IO can be improved. Of course instances should be on different machines as the problem is of IO. There could be some other issues as well that the logic is CPU intensive as well as memory hungry. You need to profile your app to find all the issues.

Bhushan
yes you are right, it is not very clear. We created report files like report + userID. So if user opens more than one browsers and tries to generate reports; there request from three browsers will try to generate files which have same names
But are the reports different or are they the same. If different then you should use a different naming convention, probably a timestamp also in the name. If the reports are same and the generation takes long time, its a wastage that its getting duplicated. You should implement a mechanism to stop that. But what is your actual problem, is my explanation above not helpful?
Bhushan
A: 

For large reports you can put the requests into a processing queue and have your customers wait a few minutes for it to be ready. Instant report generation for large data sets puts a lot of strain on your system, and is hard to load balance.

Perhaps have your web site forward requests to a queue that will eventually be processed by separate report generating servers. You can add more of these servers to process items in the queue, and this processing will not affect the website users, they will just have to live with reports not being instant.

Also think of processing that you can do before hand so that all the processing isn't 'on demand'. If they have the same reports every day, allow it to be scheduled, so your clients don't feel like they are waiting too long for reports.

Heavy IO should be offloaded to servers that are not processing client web requests.

Kekoa
Thank you. We use load balancing. There are two servers. But both of them process client web requests. So we create a new application pool for reports. But exactly I do not know whether this can solve the problem. So we do not have any extra servers only we have a new application pool. Do you think that web garden can be a solution for us? And there are some parameters here: http://support.microsoft.com/?id=821268 Do you think that these can help us?