What is the fastest way to delete 1000000 records in cmdb (incl cascade deletes) ?

tommyjensen
Giga Expert

However some records should NOT be deleted?

Using a background script and deleting with deleteMultiple() runs 20 minutes to delete 100 records! It must be possible to do that faster even with cascade deletes.

24 REPLIES 24

Michael Fry1
Kilo Patron

Check out the doit background script: wiki Remove All Data from a Table - ServiceNow Wiki


That is exactly how I do it but it is just too slow.


Hi Tommy,



You need to turn workflow to false when doing mass deletes:



http://wiki.servicenow.com/index.php?title=GlideRecord#setWorkflow&gsc.tab=0



So something like this should do it:



var gr = new GlideRecord('cmdb_ci');


gr.addQuery('<a condition>');


gr.query();


gr.setWorkflow(false);


gr.deleteMultiple();



Even so, don't expect it to be super fast as it takes a while to do cascade deletes.



Regards,


Sergiu


I believe setWorkflow calls are ignored when doing a deleteMultiple() or deleteRecord()




Note:When using deleteMultiple() to cascade delete, prior calls to setWorkflow() on the same GlideRecord object are ignored. 

Note: Dot-walking is not supported for this method. When deploying the deleteMultiple() function on referenced tables, all the records in the table will be deleted. Also, when using deleteRecord() to cascade delete, prior calls to setWorkflow() on the same GlideRecord object are ignored.


source: GlideRecord - ServiceNow Wiki



Thanks,


Berny