Index: src/includes/extend/akismet.php
--- src/includes/extend/akismet.php
+++ src/includes/extend/akismet.php
@@ -985,7 +985,7 @@
 		$delete_limit = (int) apply_filters( '_bbp_akismet_delete_spam_limit',
 			defined( 'AKISMET_DELETE_LIMIT' )
 				? AKISMET_DELETE_LIMIT
-				: 10000
+				: 1000
 		);

 		// Validate the deletion limit
@@ -1037,7 +1037,7 @@
 			$format_string = implode( ", ", array_fill( 0, count( $spam_ids ), '%s' ) );

 			// Run the delete queries
-			$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->posts} WHERE post_id IN ( " . $format_string . " )", $spam_ids ) );
+			$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->posts} WHERE ID IN ( " . $format_string . " )", $spam_ids ) );
 			$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN ( " . $format_string . " )", $spam_ids ) );

 			// Clean the post cache for these topics & replies
@@ -1079,6 +1079,21 @@
 		global $wpdb;

 		/**
+		 * Determines how many posts will be deleted in each batch.
+		 *
+		 * @param int The default as defined by AKISMET_DELETE_LIMIT (also used
+		 *            in Akismet WordPress plugin).
+		 */
+		$delete_limit = (int) apply_filters( '_bbp_akismet_delete_spam_limit',
+			defined( 'AKISMET_DELETE_LIMIT' )
+				? AKISMET_DELETE_LIMIT
+				: 1000
+		);
+
+		// Validate the deletion limit
+		$delete_limit = max( 1, intval( $delete_limit ) );
+
+		/**
 		 * Determines how many days a piece of spam will be left in the Spam
 		 * queue before being deleted.
 		 *
@@ -1090,10 +1105,10 @@
 		$interval = max( 1, intval( $interval ) );

 		// Setup the query
-		$sql = "SELECT m.post_id FROM {$wpdb->postmeta} as m INNER JOIN {$wpdb->posts} as p ON m.post_id = p.id WHERE m.meta_key = '_bbp_akismet_as_submitted' AND DATE_SUB(NOW(), INTERVAL %d DAY) > p.post_date_gmt LIMIT 10000";
+		$sql = "SELECT m.post_id FROM {$wpdb->postmeta} as m INNER JOIN {$wpdb->posts} as p ON m.post_id = p.ID WHERE m.meta_key = '_bbp_akismet_as_submitted' AND DATE_SUB(NOW(), INTERVAL %d DAY) > p.post_date_gmt LIMIT %d";

 		// Query loop of topic & reply IDs
-		while ( $spam_ids = $wpdb->get_col( $wpdb->prepare( $sql, $interval ) ) ) {
+		while ( $spam_ids = $wpdb->get_col( $wpdb->prepare( $sql, $interval, $delete_limit ) ) ) {

 			// Exit loop if no spam IDs
 			if ( empty( $spam_ids ) ) {
@@ -1143,6 +1158,21 @@
 	public function delete_orphaned_spam_meta() {
 		global $wpdb;

+		/**
+		 * Determines how many posts will be deleted in each batch.
+		 *
+		 * @param int The default as defined by AKISMET_DELETE_LIMIT (also used
+		 *            in Akismet WordPress plugin).
+		 */
+		$delete_limit = (int) apply_filters( '_bbp_akismet_delete_spam_limit',
+			defined( 'AKISMET_DELETE_LIMIT' )
+				? AKISMET_DELETE_LIMIT
+				: 1000
+		);
+
+		// Validate the deletion limit
+		$delete_limit = max( 1, intval( $delete_limit ) );
+
 		$last_meta_id = 0;

 		// Start time (float)
@@ -1154,10 +1184,10 @@
 		$max_exec_time = (float) max( ini_get( 'max_execution_time' ) - 5, 3 );

 		// Setup the query
-		$sql = "SELECT m.meta_id, m.post_id, m.meta_key FROM {$wpdb->postmeta} as m LEFT JOIN {$wpdb->posts} as p ON m.post_id = p.id WHERE p.id IS NULL AND m.meta_id > %d ORDER BY m.meta_id LIMIT 1000";
+		$sql = "SELECT m.meta_id, m.post_id, m.meta_key FROM {$wpdb->postmeta} as m LEFT JOIN {$wpdb->posts} as p ON m.post_id = p.ID WHERE p.ID IS NULL AND m.meta_id > %d ORDER BY m.meta_id LIMIT %d";

 		// Query loop of topic & reply IDs
-		while ( $spam_meta_results = $wpdb->get_results( $wpdb->prepare( $sql, $last_meta_id ) ) ) {
+		while ( $spam_meta_results = $wpdb->get_results( $wpdb->prepare( $sql, $last_meta_id, $delete_limit ) ) ) {

 			// Exit loop if no spam IDs
 			if ( empty( $spam_meta_results ) ) {
