MediaWiki master
Wikimedia\Rdbms\TransactionProfiler Class Reference

Detect high-contention DB queries via profiling calls. More...

Inherits LoggerAwareInterface.

Collaboration diagram for Wikimedia\Rdbms\TransactionProfiler:

Public Member Functions

 __construct ()
 
 recordConnection ( $server, $db, bool $isPrimaryWithReplicas)
 Mark a DB as having been connected to with a new handle.
 
 recordQueryCompletion ( $query, float $sTime, bool $isWrite, ?int $rowCount, string $trxId, ?string $serverName=null)
 Register the name and time of a method for slow DB trx detection.
 
 redefineExpectations (array $expects, string $fname)
 Clear all expectations and hit counters and set new performance expectations.
 
 resetExpectations ()
 Reset all performance expectations and hit counters.
 
 setExpectation (string $event, $limit, string $fname)
 Set performance expectations.
 
 setExpectations (array $expects, string $fname)
 Set one or multiple performance expectations.
 
 setLogger (LoggerInterface $logger)
 
 setMockTime (&$time)
 
 setRequestMethod (?string $method)
 
 setStatsFactory (StatsFactory $statsFactory)
 Set statsFactory.
 
 silenceForScope (string $type=self::EXPECTATION_ANY)
 Temporarily ignore expectations until the returned object goes out of scope.
 
 transactionWritingIn ( $server, $db, string $id, float $startTime)
 Mark a DB as in a transaction with one or more writes pending.
 
 transactionWritingOut ( $server, $db, string $id, float $writeTime, int $affected)
 Mark a DB as no longer in a transaction.
 

Public Attributes

const EXPECTATION_ANY = 'any'
 Any type of expectation.
 
const EXPECTATION_REPLICAS_ONLY = 'replicas-only'
 Any expectations about replica usage never occurring.
 

Detailed Description

Detect high-contention DB queries via profiling calls.

This class is meant to work with an IDatabase object, which manages queries.

Access: internal
For use by Database only
Since
1.24

Definition at line 39 of file TransactionProfiler.php.

Constructor & Destructor Documentation

◆ __construct()

Wikimedia\Rdbms\TransactionProfiler::__construct ( )

Member Function Documentation

◆ recordConnection()

Wikimedia\Rdbms\TransactionProfiler::recordConnection ( $server,
$db,
bool $isPrimaryWithReplicas )

Mark a DB as having been connected to with a new handle.

Note that there can be multiple connections to a single DB.

Parameters
string$serverDB server
string | null$dbDB name
bool$isPrimaryWithReplicasIf the server is the primary and there are replicas

Definition at line 254 of file TransactionProfiler.php.

◆ recordQueryCompletion()

Wikimedia\Rdbms\TransactionProfiler::recordQueryCompletion ( $query,
float $sTime,
bool $isWrite,
?int $rowCount,
string $trxId,
?string $serverName = null )

Register the name and time of a method for slow DB trx detection.

This assumes that all queries are synchronous (non-overlapping)

Parameters
string | GeneralizedSql$queryFunction name or generalized SQL
float$sTimeStarting UNIX wall time
bool$isWriteWhether this is a write query
int | null$rowCountNumber of affected/read rows
string$trxIdTransaction id
string | null$serverNamedb host name like db1234

Definition at line 313 of file TransactionProfiler.php.

◆ redefineExpectations()

Wikimedia\Rdbms\TransactionProfiler::redefineExpectations ( array $expects,
string $fname )

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)

Parameters
array$expectsMap of (event name => limit), {
See also
self::EVENT_NAMES}
Parameters
string$fname
Since
1.33

Definition at line 240 of file TransactionProfiler.php.

References Wikimedia\Rdbms\TransactionProfiler\setExpectations().

◆ resetExpectations()

Wikimedia\Rdbms\TransactionProfiler::resetExpectations ( )

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

Definition at line 226 of file TransactionProfiler.php.

◆ setExpectation()

Wikimedia\Rdbms\TransactionProfiler::setExpectation ( string $event,
$limit,
string $fname )

Set performance expectations.

With conflicting expectations, the most narrow ones will be used

Parameters
string$eventEvent name, {
See also
self::EVENT_NAMES}
Parameters
float | int$limitMaximum event count, event value, or total event value
string$fnameCaller
Since
1.25

Definition at line 186 of file TransactionProfiler.php.

Referenced by Wikimedia\Rdbms\TransactionProfiler\setExpectations().

◆ setExpectations()

Wikimedia\Rdbms\TransactionProfiler::setExpectations ( array $expects,
string $fname )

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

Parameters
array$expectsMap of (event name => limit), {
See also
self::EVENT_NAMES}
Parameters
string$fname
Since
1.26

Definition at line 211 of file TransactionProfiler.php.

References Wikimedia\Rdbms\TransactionProfiler\setExpectation().

Referenced by Wikimedia\Rdbms\TransactionProfiler\redefineExpectations().

◆ setLogger()

Wikimedia\Rdbms\TransactionProfiler::setLogger ( LoggerInterface $logger)

◆ setMockTime()

Wikimedia\Rdbms\TransactionProfiler::setMockTime ( & $time)
Parameters
float | null&$timeMock UNIX timestamp for testing

Definition at line 571 of file TransactionProfiler.php.

◆ setRequestMethod()

Wikimedia\Rdbms\TransactionProfiler::setRequestMethod ( ?string $method)
Parameters
?string$methodHTTP method; null for CLI mode
Returns
void

Definition at line 136 of file TransactionProfiler.php.

◆ setStatsFactory()

Wikimedia\Rdbms\TransactionProfiler::setStatsFactory ( StatsFactory $statsFactory)

Set statsFactory.

Parameters
StatsFactory$statsFactory
Returns
void

Definition at line 128 of file TransactionProfiler.php.

◆ silenceForScope()

Wikimedia\Rdbms\TransactionProfiler::silenceForScope ( string $type = self::EXPECTATION_ANY)

Temporarily ignore expectations until the returned object goes out of scope.

During this time, violation of expectations will not be logged and counters for expectations (e.g. "conns") will not be incremented.

This will suppress warnings about event counters which have a limit of zero. The main use case is too avoid warnings about primary connections/writes and warnings about getting any primary/replica connections at all.

Parameters
string$typeClass EXPECTATION_* constant [default: TransactionProfiler::EXPECTATION_ANY]
Returns
ScopedCallback

Definition at line 153 of file TransactionProfiler.php.

◆ transactionWritingIn()

Wikimedia\Rdbms\TransactionProfiler::transactionWritingIn ( $server,
$db,
string $id,
float $startTime )

Mark a DB as in a transaction with one or more writes pending.

Note that there can be multiple connections to a single DB.

Parameters
string$serverDB server
string | null$dbDB name
string$idID string of transaction
float$startTimeUNIX timestamp

Definition at line 284 of file TransactionProfiler.php.

◆ transactionWritingOut()

Wikimedia\Rdbms\TransactionProfiler::transactionWritingOut ( $server,
$db,
string $id,
float $writeTime,
int $affected )

Mark a DB as no longer in a transaction.

This will check if locks are possibly held for longer than needed and log any affected transactions to a special DB log. Note that there can be multiple connections to a single DB.

Parameters
string$serverDB server
string | null$dbDB name
string$idID string of transaction
float$writeTimeTime spent in write queries
int$affectedNumber of rows affected by writes

Definition at line 387 of file TransactionProfiler.php.

Member Data Documentation

◆ EXPECTATION_ANY

const Wikimedia\Rdbms\TransactionProfiler::EXPECTATION_ANY = 'any'

Any type of expectation.

Definition at line 102 of file TransactionProfiler.php.

◆ EXPECTATION_REPLICAS_ONLY

const Wikimedia\Rdbms\TransactionProfiler::EXPECTATION_REPLICAS_ONLY = 'replicas-only'

Any expectations about replica usage never occurring.

Definition at line 104 of file TransactionProfiler.php.


The documentation for this class was generated from the following file: