diff --git a/app/models/application_record.rb b/app/models/application_record.rb
index d710abfdc9f7311ecda1fa536e697ff4ecc2b227..121c4bbfc32084ea8cb4f87ce6e0b8444ba3290e 100644
--- a/app/models/application_record.rb
+++ b/app/models/application_record.rb
@@ -104,19 +104,6 @@ def self.declarative_enum(enum_mod)
     enum(enum_mod.key => values)
   end
 
-  def self.transaction(**options, &block)
-    if options[:requires_new] && track_subtransactions?
-      ::Gitlab::Database::Metrics.subtransactions_increment(self.name)
-    end
-
-    super(**options, &block)
-  end
-
-  def self.track_subtransactions?
-    ::Feature.enabled?(:active_record_subtransactions_counter, type: :ops, default_enabled: :yaml) &&
-      connection.transaction_open?
-  end
-
   def self.cached_column_list
     self.column_names.map { |column_name| self.arel_table[column_name] }
   end
diff --git a/config/feature_flags/ops/active_record_subtransactions_counter.yml b/config/feature_flags/ops/active_record_subtransactions_counter.yml
deleted file mode 100644
index 0d2b1b0c84a29cdadf42b97c9c4307549b25c258..0000000000000000000000000000000000000000
--- a/config/feature_flags/ops/active_record_subtransactions_counter.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: active_record_subtransactions_counter
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66477
-rollout_issue_url:
-milestone: '14.1'
-type: ops
-group: group::pipeline execution
-default_enabled: false
diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb
index 022752a065051d6a402ea1a174c398d5e612ba67..110708e44ebc67440fdfda812436829d3a5c7529 100644
--- a/lib/gitlab/database.rb
+++ b/lib/gitlab/database.rb
@@ -214,9 +214,13 @@ module ActiveRecordBaseTransactionMetrics
       extend ActiveSupport::Concern
 
       class_methods do
-        # A monkeypatch over ActiveRecord::Base.transaction.
-        # It provides observability into transactional methods.
+        # A patch over ActiveRecord::Base.transaction that provides
+        # observability into transactional methods.
         def transaction(**options, &block)
+          if options[:requires_new] && connection.transaction_open?
+            ::Gitlab::Database::Metrics.subtransactions_increment(self.name)
+          end
+
           ActiveSupport::Notifications.instrument('transaction.active_record', { connection: connection }) do
             super(**options, &block)
           end
diff --git a/spec/models/application_record_spec.rb b/spec/models/application_record_spec.rb
index f9a05c720a3eaaedd80b100a2090f86486029afc..40e2aae0bad36150e26df3d183d35b4eb232883e 100644
--- a/spec/models/application_record_spec.rb
+++ b/spec/models/application_record_spec.rb
@@ -164,6 +164,23 @@
         end
       end
     end
+
+    # rubocop:disable Database/MultipleDatabases
+    it 'increments a counter when a transaction is created in ActiveRecord' do
+      expect(described_class.connection.transaction_open?).to be false
+
+      expect(::Gitlab::Database::Metrics)
+        .to receive(:subtransactions_increment)
+        .with('ActiveRecord::Base')
+        .once
+
+      ActiveRecord::Base.transaction do
+        ActiveRecord::Base.transaction(requires_new: true) do
+          expect(ActiveRecord::Base.connection.transaction_open?).to be true
+        end
+      end
+    end
+    # rubocop:enable Database/MultipleDatabases
   end
 
   describe '.with_fast_read_statement_timeout' do