X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Flibs%2Frdbms%2FTransactionProfiler.php;h=e4dad01dda3fbfb7c7899f7b365f8c446d32d8c2;hb=3a026473873ac3cc9d5c181f05961f474495d32c;hp=c353a224c6c18eed42e5889460016819acb833f3;hpb=b610a3b617f7616b2f1db12498cbad5aeae12576;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/libs/rdbms/TransactionProfiler.php b/includes/libs/rdbms/TransactionProfiler.php index c353a224c6..e4dad01dda 100644 --- a/includes/libs/rdbms/TransactionProfiler.php +++ b/includes/libs/rdbms/TransactionProfiler.php @@ -62,6 +62,7 @@ class TransactionProfiler implements LoggerAwareInterface { 'conns' => INF, 'masterConns' => INF, 'maxAffected' => INF, + 'readQueryRows' => INF, 'readQueryTime' => INF, 'writeQueryTime' => INF ]; @@ -113,10 +114,12 @@ class TransactionProfiler implements LoggerAwareInterface { } /** - * Set multiple performance expectations + * Set one or multiple performance expectations * * With conflicting expectations, the most narrow ones will be used * + * Use this to initialize expectations or make them stricter mid-request + * * @param array $expects Map of (event => limit) * @param string $fname * @since 1.26 @@ -128,7 +131,11 @@ class TransactionProfiler implements LoggerAwareInterface { } /** - * Reset performance expectations and hit counters + * Reset all performance expectations and hit counters + * + * Use this for unit testing or before applying a totally different set of expectations + * for a different part of the request, such as during "post-send" (execution after HTTP + * response completion) * * @since 1.25 */ @@ -144,6 +151,21 @@ class TransactionProfiler implements LoggerAwareInterface { $this->expectBy = []; } + /** + * Clear all expectations and hit counters and set new performance expectations + * + * Use this to apply a totally different set of expectations for a different part + * of the request, such as during "post-send" (execution after HTTP response completion) + * + * @param array $expects Map of (event => limit) + * @param string $fname + * @since 1.33 + */ + public function redefineExpectations( array $expects, $fname ) { + $this->resetExpectations(); + $this->setExpectations( $expects, $fname ); + } + /** * Mark a DB as having been connected to with a new handle * @@ -199,7 +221,7 @@ class TransactionProfiler implements LoggerAwareInterface { * @param string $query Function name or generalized SQL * @param float $sTime Starting UNIX wall time * @param bool $isWrite Whether this is a write query - * @param int $n Number of affected rows + * @param int $n Number of affected/read rows */ public function recordQueryCompletion( $query, $sTime, $isWrite = false, $n = 0 ) { $eTime = microtime( true ); @@ -209,6 +231,10 @@ class TransactionProfiler implements LoggerAwareInterface { $this->logger->warning( "Query affected $n row(s):\n" . $query . "\n" . ( new RuntimeException() )->getTraceAsString() ); + } elseif ( !$isWrite && $n > $this->expect['readQueryRows'] ) { + $this->logger->warning( + "Query returned $n row(s):\n" . $query . "\n" . + ( new RuntimeException() )->getTraceAsString() ); } // Report when too many writes/queries happen...