@@ -48,6 +48,13 @@ class Tracker
4848 */
4949 protected static array $ trackingCache = [];
5050
51+ /**
52+ * Cache of checked databases.
53+ *
54+ * @var bool[]
55+ */
56+ private static array $ trackedDatabaseCache = [];
57+
5158 /**
5259 * Actually enables tracking. This needs to be done after all
5360 * underlaying code is initialized.
@@ -317,6 +324,8 @@ private static function changeTracking(
317324 return false ;
318325 }
319326
327+ unset(self ::$ trackedDatabaseCache [$ dbName ]); // Clear cache due to the change in tracking status
328+
320329 $ sqlQuery = sprintf (
321330 'UPDATE %s.%s SET `tracking_active` = %d '
322331 . ' WHERE `db_name` = %s AND `table_name` = %s AND `version` = %s ' ,
@@ -678,13 +687,20 @@ private static function isAnyTrackingInProgress(
678687 TrackingFeature $ trackingFeature ,
679688 string $ dbname ,
680689 ): bool {
690+ if (isset (self ::$ trackedDatabaseCache [$ dbname ])) {
691+ return self ::$ trackedDatabaseCache [$ dbname ];
692+ }
693+
681694 $ sqlQuery = sprintf (
682695 '/*NOTRACK*/ SELECT 1 FROM %s.%s WHERE tracking_active = 1 AND db_name = %s LIMIT 1 ' ,
683696 Util::backquote ($ trackingFeature ->database ),
684697 Util::backquote ($ trackingFeature ->tracking ),
685698 $ dbi ->quoteString ($ dbname , ConnectionType::ControlUser),
686699 );
687700
688- return $ dbi ->queryAsControlUser ($ sqlQuery )->fetchValue () !== false ;
701+ $ isTracked = $ dbi ->queryAsControlUser ($ sqlQuery )->fetchValue () !== false ;
702+ self ::$ trackedDatabaseCache [$ dbname ] = $ isTracked ;
703+
704+ return $ isTracked ;
689705 }
690706}
0 commit comments