Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to Improve Dashboard Performance When Reports Load Slowly?

VaddiR
Tera Contributor

Hi Community,

We are experiencing slowness when loading dashboards in ServiceNow. The issue seems to occur because some reports on the dashboard take a long time to load. When such a dashboard is set as the homepage, users are unable to open other modules until the dashboard fully loads.

I have two questions:

  1. How can we optimize these reports to improve dashboard performance? Are there best practices for report design or data retrieval that can help reduce load time?

  2. Can we use cache.do to clear the cache frequently? Will this help in improving dashboard responsiveness, or is there a better approach for managing cache?

Any guidance, best practices, or alternative solutions would be greatly appreciated.

Thanks in advance!

1 ACCEPTED SOLUTION

MaxMixali
Kilo Sage

Hi here a list of check that you can follow to optimise dashboard and reporting hope that can help.

In generally it's important that you will display data with same interval of update and do not update in automatically the reports and dashboard 

 

1)  Reduce the Number of Reports on the Dashboard
 
ServiceNow recommends:
•< 10 reports per dashboard tab
•Use tabs to split dashboards logically
e.g., In Progress | Compliance | Performance
 
This reduces simultaneous rendering.
 
 
2)  Change Reports to Use Scheduled Data Instead of Live Data
 
The most important optimization:
 
If your reports use Performance Analytics (PA):
 
Switch from Live query to Indicator score (preprocessed data).
 
How:
•Open the report
•Change data source from Table to PA Indicator / PA Breakdown
•Use scheduled data collection
 
Result:
Reports load instantly because they no longer run GlideRecord on the fly.
 
 
3)  Optimize Report Conditions (Avoid Heavy Queries)
 
Avoid:
•Wildcard searches (CONTAINS, STARTSWITH)
•Queries on long text fields
•Querying the whole table (add date filters!)
•“ORDER BY” on large datasets
•Joins on tasks via script fields
 
Do:
•Add a date range (last 30 days, last 3 months, etc.)
•Add indexed fields to the filter (explained below)
•Keep conditions simple
 
 
4)  Add Indexes to Improve Report Queries
 
Look in:
 
System Logs → Stats → Slow Query Logs
 
Find slow report queries and add an index:
 
System Definition → Indexes → New
 
Good candidates:
•sys_created_on
•sys_updated_on
•state
•active
•assignment_group
•assigned_to
 
Creating the right index often improves response from 10 seconds → < 0.5 seconds.
 
 
5)  Use Performance Analytics Widgets Instead of Standard Reports
 
PA widgets:
•Are cached
•Load faster
•Support breakdowns, targets, forecasts
•Allow prefiltered views
 
If you currently have:
•List reports
•Bar/Line/Pie reports
•Score trend reports
 
You should convert them to PA visualizations.
 
 
6)  Enable Caching for Dashboards
 
Go to:
 
Performance Analytics → Dashboard Cache
•Enable Data Cache
•Set refresh to every 5–15 minutes
•Works extremely well for static KPIs and trending reports
 
This reduces dashboard load time from seconds → milliseconds.
 
 
7)  Avoid “List” Reports With >500 Rows
 
Large list reports are the main reason dashboards freeze.
 
Replace them with:
•PA widgets
•Count / Distribution charts
•Pivot tables
•Reports with a link like “View list” instead of embedding the whole list
 
 
😎  Convert Dashboards to “Next Experience / UI Builder”
 
UI16 Dashboards render slower.
 
Next Experience Dashboards (UI Builder) provide:
•Better caching
•Faster rendering engine
•More efficient widget loading
•Lazy loading (reports only load when visible)
 
 
9)  Enable Lazy Loading for Widgets (UI Builder Feature)
 
If your dashboard is in UI Builder:
 
Turn on:
•Lazy Load
•Client-side caching
 
This prevents all widgets from loading at once.
 
 
10)  Check for Slow Scripts Embedded in Reports
 
Custom script-based report sources slow everything:
•Scripted REST sources
•Scripted report data sources
•Business rules running on query
•ACLs evaluating scripts
 
Check:
 
System Logs → All → Slow Scripts
 
Refactor or remove heavy scripts.
 
 
11)  Use Report Caching (Platform Feature)
 
ServiceNow caches report data automatically when enabled.
 
Check:
 
System Properties → glide.ui.report.chart.cache.enabled = true
 
If disabled → reports run new queries on every dashboard load.
 
 
12)  Turn Off Automatic Refresh for Reports
 
If your dashboard refreshes every minute, every report is constantly querying the database.
 
Set refresh to:
•5 minutes
•10 minutes
•Or manual refresh
 
Especially important for multi-tab dashboards.
 
 
13)  Profile the Dashboard Using ‘Diagnostics → Page Inspector’
 
Go to:
•System Diagnostics → Diagnostics Tools → Page Inspector
•Load the dashboard
 
Look for:
•slow transactions
•slow widgets
•heavy queries
•network bottlenecks
 
ServiceNow uses this internally to optimize dashboards.
 
 

View solution in original post

5 REPLIES 5

Dr Atul G- LNG
Tera Patron
Tera Patron

Hi @VaddiR 

Reports provide the current status and performance based on the underlying table and data they are built on. The load time of a report depends on the table, the number of conditions, and the type of report.

  • Sometimes, reports with many conditions or built on large/base tables (like core tables) may take longer to load.

  • Conversely, reports with few conditions or built on smaller tables are usually faster.

I don’t think we can do much to drastically improve performance, but if you want to optimize:

  • Reassess your reports and remove unused or unnecessary ones.

  • Use filters and conditions smartly to reduce load on large tables.

 

https://www.servicenow.com/community/platform-analytics-articles/best-practices-reporting/ta-p/23036...

 

https://www.servicenow.com/community/itom-forum/reporting-guidelines-best-practices-and-words-of-war...

 

Solved: Slow loading of the dashboard - ServiceNow Community
How to improve dashboard loading performance - ServiceNow Community

Boosting ServiceNow Performance: Troubleshooting Slow Reports and Dashboards

Troubleshooting slow instance performance - Support and Troubleshooting

 

*************************************************************************************************************
If my response proves useful, please indicate its helpfulness by selecting " Accept as Solution" and " Helpful." This action benefits both the community and me.

Regards
Dr. Atul G. - Learn N Grow Together
ServiceNow Techno - Functional Trainer
LinkedIn: https://www.linkedin.com/in/dratulgrover
YouTube: https://www.youtube.com/@LearnNGrowTogetherwithAtulG
Topmate: https://topmate.io/atul_grover_lng [ Connect for 1-1 Session]

****************************************************************************************************************

MaxMixali
Kilo Sage


Hi Here's an approach to optimize your reports and improve dashboard performance, i hope this can help.

 

 

Navigate to System Diagnostics > Stats > Slow Queries
Check System Diagnostics > Sessions > Active Transactions during dashboard load
Enable transaction quotas to identify problematic reports
Use the Report Performance module to see execution times


2. Report Design Best PracticesData Retrieval Optimization:

Limit the date range: Use relative date filters (last 30 days instead of all time)
Reduce record count: Add filters to limit data retrieved

Example: Instead of "All incidents", use "Incidents from last 90 days where state != Closed"


Use indexed fields in filters: Priority, State, Assignment Group are typically indexed
Avoid OR conditions: Multiple OR conditions prevent index usage
Remove unnecessary fields from the report definition
Report Configuration:

Limit grouping levels: Multiple group-by operations are expensive
Use aggregation wisely: COUNT is faster than DISTINCT COUNT
Avoid complex calculations in report fields when possible
Set reasonable refresh intervals: Don't use real-time refresh unless necessary
Implement drill-down instead of showing all details upfront

 

3. Database Query Optimizationjavascript

 

// BAD - Unindexed query with OR conditions
var gr = new GlideRecord('incident');
gr.addQuery('category', 'Hardware');
gr.addOrCondition('category', 'Software');
gr.addOrCondition('category', 'Network');
gr.query();

// GOOD - Use encoded query or IN operator
var gr = new GlideRecord('incident');
gr.addQuery('category', 'IN', 'Hardware,Software,Network');
gr.query();

 

4. Use Report Scheduled Jobs
For data-intensive reports:

Navigate to Reports > Administration > Scheduled Reports
Pre-generate reports during off-peak hours
Store results and display cached version
This is especially useful for dashboards used as homepage


5. Dashboard-Specific OptimizationCanvas vs. Legacy Dashboards:

Performance Analytics Dashboards (Canvas) generally perform better
Consider migrating from Homepage dashboards to Performance Analytics
Canvas dashboards support lazy loading and better caching
Dashboard Configuration:

Reduce widgets per dashboard: Maximum 6-8 widgets recommended
Use list widgets sparingly: Lists are more expensive than charts
Enable lazy loading: Widgets load as they come into view
Set appropriate refresh intervals: 5-10 minutes instead of real-time
Remove interactive filters if not essential

 

6. Technical OptimizationsAdd Database Indexes:

 

// If you frequently filter by custom fields, add indexes

// Navigate to: System Definition > Tables & Columns
// Select the table, find the column, check "Create index"Use Aggregate Tables:

 

For historical trending, create aggregate tables
Pre-calculate metrics during off-peak hours
Query aggregates instead of raw data
Implement Data Archiving:

Archive old closed records to improve query performance
Use ServiceNow's Data Archiving feature for large tables

 

 

VaddiR
Tera Contributor

Is it a good practice to use cache.do?

@VaddiR  yes, we can do.

*************************************************************************************************************
If my response proves useful, please indicate its helpfulness by selecting " Accept as Solution" and " Helpful." This action benefits both the community and me.

Regards
Dr. Atul G. - Learn N Grow Together
ServiceNow Techno - Functional Trainer
LinkedIn: https://www.linkedin.com/in/dratulgrover
YouTube: https://www.youtube.com/@LearnNGrowTogetherwithAtulG
Topmate: https://topmate.io/atul_grover_lng [ Connect for 1-1 Session]

****************************************************************************************************************