The CreatorCon Call for Content is officially open! Get started here.

Amit Gujarathi
Giga Sage
Giga Sage

Glide Script To Identify Excessive Record Updates by Users

This article provides a method to pinpoint which users are excessively updating the same record, leading to potential performance issues due to the overflow of the sys_journal_field table with a Glide Script.

 

Why the Glide Script is Necessary

  • Performance Issues: Users experience slow response times when opening cases, problems, change records, etc., primarily due to significant data extraction from the sys_journal_field table.
  • Worknotes Storage: The sys_journal_field table houses worknotes for each record, which can become excessive due to numerous updates, each adding a new worknote.
  • Identifying Excessive Updates: Although the 'Updates' column in the list view shows the last user to make an update, it does not reveal the full extent of updates made by various users.
  • Text Index Events: These events can track updates made by users to records, but are limited to capturing data for only 6 - 7 days due to retention policies.

 

Caution: Always test scripts in a sub-production environment first.

Script to Retrieve Top 100 Most Redundantly Updated Records

Ensure you're running the script with global scope.

// Function to get count of redundant record updates by table, record, and user
function GetUpdatedRecords() {
    var instanceName = gs.getProperty('instance_name');
    var count = new GlideAggregate('sysevent');
    // Uncomment below for a specific date range, comment the subsequent line
    // var strEncodedQuery = "queue=text_index^state=processed^parm2=update^sys_created_onBETWEENjavascript:gs.dateGenerate('2021-09-29','00:00:00')@javascript:gs.dateGenerate('2021-10-06','23:59:59')";
    // For all records, uncomment below and comment the above line
    var strEncodedQuery = "queue=text_index^state=processed^parm2=update";
    count.addEncodedQuery(strEncodedQuery);
    count.addAggregate('COUNT');
    count.groupBy('table');
    count.groupBy('instance');
    count.groupBy('sys_created_by');
    count.addHaving('COUNT', '>', 1);
    count.orderByAggregate('COUNT');
    // Uncomment below to limit the record list
    // count.setLimit(10);
    count.query();
    while (count.next()) {
        var x_count = count.getAggregate('COUNT');
        var x_table = count.table.getDisplayValue();
        var x_instance = 'https://' + instanceName + '.service-now.com/' + x_table + '.do?sys_id=' + count.instance.getDisplayValue();
        var x_created_by = count.sys_created_by.getDisplayValue();
        gs.info("Count: {0} | {1} | {2} | {3}", [x_count, x_table, x_instance, x_created_by]);
    }
}

GetUpdatedRecords();

 

Sample Results

The output format is: Count Of Updates | Source Table | Updated Record Full Link | User_Name That Made the Update

For example:

 

Comments
Anton42
Tera Expert

Hello @Amit Gujarathi . I stumble upon your article during a search at now support. Your encoded query with date range does not work. You should change it to:

sys_created_onBETWEENjavascript:gs.dateGenerate('2025-10-01','00:00:00')@javascript:gs.dateGenerate('2025-10-07','23:59:59')

Looks like the sn community software is adding "...&colon..." if you save articles and comments. Bad bug....

This is how it should look like

bug.png

Version history
Last update:
‎02-14-2024 07:41 PM
Updated by:
Contributors