diff --git a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py
index 0d553ca..63b2801 100644
--- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py
+++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py
@@ -6,7 +6,7 @@
 from frappe import _, qb
 from frappe.desk.notifications import clear_notifications
 from frappe.model.document import Document
-from frappe.utils import cint, create_batch
+from frappe.utils import cint, create_batch, get_link_to_form
 
 
 class TransactionDeletionRecord(Document):
@@ -40,7 +40,7 @@
 
 	def __init__(self, *args, **kwargs):
 		super(TransactionDeletionRecord, self).__init__(*args, **kwargs)
-		self.batch_size = 5
+		self.batch_size = 5000
 
 	def validate(self):
 		frappe.only_for("System Manager")
@@ -98,6 +98,7 @@
 		self.delete_company_transactions()
 
 	def delete_notifications(self):
+		self.validate_doc_status()
 		if not self.clear_notifications:
 			clear_notifications()
 			self.db_set("clear_notifications", 1)
@@ -108,9 +109,19 @@
 		for doctype in doctypes_to_be_ignored_list:
 			self.append("doctypes_to_be_ignored", {"doctype_name": doctype})
 
+	def validate_doc_status(self):
+		if self.status != "Running":
+			frappe.throw(
+				_("{0} is not running. Cannot trigger events for this Document").format(
+					get_link_to_form("Transaction Deletion Record", self.name)
+				)
+			)
+
 	@frappe.whitelist()
 	def delete_bins(self):
 		# This methid is the entry point for the chain of events that follow
+		self.db_set("status", "Running")
+
 		if not self.delete_bin_data:
 			frappe.db.sql(
 				"""delete from `tabBin` where warehouse in
@@ -122,6 +133,7 @@
 
 	def delete_lead_addresses(self):
 		"""Delete addresses to which leads are linked"""
+		self.validate_doc_status()
 		if not self.delete_leads_and_addresses:
 			leads = frappe.get_all("Lead", filters={"company": self.company})
 			leads = ["'%s'" % row.get("name") for row in leads]
@@ -162,6 +174,7 @@
 		self.chain_call(method="reset_company_values")
 
 	def reset_company_values(self):
+		self.validate_doc_status()
 		if not self.reset_company_default_values:
 			company_obj = frappe.get_doc("Company", self.company)
 			company_obj.total_monthly_sales = 0
@@ -171,6 +184,7 @@
 		self.chain_call(method="delete_notifications")
 
 	def initialize_doctypes_to_be_deleted_table(self):
+		self.validate_doc_status()
 		if not self.initialize_doctypes_table:
 			doctypes_to_be_ignored_list = self.get_doctypes_to_be_ignored_list()
 			docfields = self.get_doctypes_with_company_field(doctypes_to_be_ignored_list)
@@ -187,6 +201,7 @@
 		self.chain_call(method="delete_company_transactions")
 
 	def delete_company_transactions(self):
+		self.validate_doc_status()
 		if not self.delete_transactions:
 			doctypes_to_be_ignored_list = self.get_doctypes_to_be_ignored_list()
 			docfields = self.get_doctypes_with_company_field(doctypes_to_be_ignored_list)
@@ -212,6 +227,7 @@
 						processed = int(docfield.no_of_docs) + len(reference_doc_names)
 						frappe.db.set_value(docfield.doctype, docfield.name, "no_of_docs", processed)
 					else:
+						# reset naming series
 						naming_series = frappe.db.get_value("DocType", docfield.doctype_name, "autoname")
 						if naming_series:
 							if "#" in naming_series:
@@ -224,6 +240,7 @@
 			if pending_doctypes:
 				self.chain_call(method="delete_company_transactions")
 			else:
+				self.db_set("status", "Completed")
 				self.db_set("delete_transactions", 1)
 
 	def get_doctypes_to_be_ignored_list(self):
