2012-06-26 28 views
16

Tôi đã cài đặt máy chủ báo cáo SQL (2008 R2), với một số báo cáo. Nhưng tôi có một số vấn đề về biểu diễn.Dịch vụ báo cáo SQL: Cuộc gọi đầu tiên rất chậm

Cuộc gọi đầu tiên trong ngày tới máy chủ (đi trên giao diện báo cáo bằng ví dụ), rất chậm (khoảng 30-45 giây ở mức tốt nhất).

Tạo báo cáo sau đó "nhanh" (1-2 giây).

Các cuộc gọi tiếp theo tới máy chủ sẽ luôn hoạt động cho đến ngày hôm sau. Tôi có ấn tượng rằng nó tải rất nhiều thứ trong bộ nhớ. Nhưng những gì có thể mất 30-45 giây để được nạp vào bộ nhớ ??? Và làm thế nào để tải nó chỉ một lần?

Máy chủ đủ tốt (lõi tứ, 8GB RAM, không bao giờ gần dung lượng hiện tại).

Sự cố là gì? Làm cách nào tôi có thể giải quyết vấn đề này?

Báo cáo báo cáo sẽ chỉ được khởi chạy 4-5 lần trong một tuần, vì vậy chúng sẽ luôn chậm nếu tôi không thể thay đổi điều này. Và vì nó có sẵn cho khách hàng, tôi chỉ không thể làm cho họ hiểu điều này (và báo cáo được gọi thông qua một trang web, vì vậy tôi có nguy cơ có thời gian chờ).

Thank you very much

+0

Gói thực hiện sẽ được khởi động nếu nó không được sử dụng trong một thời gian. –

Trả lời

21

t có vẻ là một vấn đề SSRS. Không có gì sai với báo cáo của bạn.

"bình thường" của nó mà SSRS mất nhiều thời gian hơn để tải lần đầu tiên bạn truy cập sau một thời gian dài không hoạt động. Vấn đề là do cách SSRS hoạt động và SSRS thường xuyên khởi động lại miền ứng dụng sau một khoảng thời gian cụ thể. Sau khi miền ứng dụng được khởi động lại, sau đó theo yêu cầu đầu tiên đến SSRS, nó cần tải tất cả các thiết lập và mất khá nhiều thời gian.

This blog của chương trình là một tác phẩm xung quanh cho các tình huống

+1

Tôi hiện đang thử giải pháp này, tôi sẽ thấy ngày mai nếu nó hoạt động :) – J4N

+0

:) Tôi đã thực sự hạnh phúc sáng nay, bởi vì nó đã làm việc! Bạn có biết tại sao SSRS cần thường xuyên khởi động lại miền ứng dụng? – J4N

+0

không thực sự: (nhưng ít nhất chúng ta biết một công việc xung quanh hahah – Diego

1

Giải pháp tốt nhất mà tôi có thể đưa ra là phát hành một lệnh 'curl' vào trang http báo cáo sử dụng thông qua lệnh cửa sổ hàng loạt trong một dịch vụ cửa sổ. Đây chạy lên trang (s) vào mỗi buổi sáng trước khi người dùng bước vào

Đừng có quyền truy cập vào mã nữa (công việc là một trong khi trước đây) nhưng câu hỏi này cho thấy làm thế nào để sử dụng curl:.

http://blogs.plexibus.com/2009/01/15/rest-esting-with-curl/

0

Có thể hoàn toàn không liên quan đến SQL Server. Hãy thử xem nếu không phải là vấn đề kiểm tra danh sách thu hồi mã ký hiệu, hãy xem Fix slow application startup due to code sign validation

+0

Tôi đã cố gắng đặt hai đăng ký đó, nhưng nó không giúp được gì, sáng nay tôi đã thử nghiệm và cùng một vấn đề. – J4N

1

Như Diego cho biết, SSRS có một số vấn đề. Cuộc gọi đầu tiên là chậm, liên quan đến cấu hình máy chủ của bạn. Tôi khuyên bạn nên cấu hình sau để thêm vào rsreportserver.config (nằm nếu bạn không biết trong C: \ Program Files \ Microsoft SQL Server \ MSRS10.MSSQLSERVER \ Reporting Services \ ReportServer \)

Nếu bạn muốn tăng bộ nhớ tối đa được sử dụng bởi SSRS: (có nghĩa là 7 GB)

<WorkingSetMaximum>7000000</WorkingSetMaximum> 

Nếu bạn muốn cải thiện cuộc gọi đầu tiên, bạn có thể thiết lập (tính theo phút)

<RecycleTime>4320</RecycleTime> 

trên thực tế SSRS có một thiết lập lại (tái chế) thời gian trong đó làm sạch bộ đệm của nó.Theo mặc định của nó giải quyết tại 720 phút (12h) để thats lý do tại sao nếu bạn mở một báo cáo mỗi buổi sáng nó thực sự tải rất chậm. Khi bạn cần, bạn có thể đặt thời gian tái chế cao hơn (2-3 ngày). Tôi không đề xuất thời gian cao hơn vì bộ đệm sẽ lấp đầy và bạn sẽ chỉ nhận được các trang trống, vì vậy bạn sẽ phải khởi động lại Dịch vụ báo cáo theo cách thủ công.

1

Đây là tập lệnh PowerShell mà tôi đã viết để khắc phục sự cố. Nó được thiết lập như một nhiệm vụ để chạy mỗi 1:00 sáng:

Stop-Service "SQL Server Reporting Services (MSSQLSERVER)" 
Start-Service "SQL Server Reporting Services (MSSQLSERVER)" 
$wc = New-Object system.net.webClient 
$cred = [System.Net.CredentialCache]::DefaultNetworkCredentials 
$wc.Credentials = $cred 
$src = $wc.DownloadString("http://localhost/Reports/Pages/Report.aspx?ItemPath=***NAME OF HOME PAGE***") 
Các vấn đề liên quan