MediaWiki REL1_39
Wikimedia\Rdbms\TransactionProfiler Class Reference

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

Inheritance diagram for Wikimedia\Rdbms\TransactionProfiler:
Collaboration diagram for Wikimedia\Rdbms\TransactionProfiler:

Public Member Functions

 __construct ()
 
 recordConnection ( $server, $db, bool $isPrimary)
 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)
 
 setSilenced (bool $value)
 
 silenceForScope ()
 Disable the logging of warnings until the returned object goes out of scope or is consumed.
 
 transactionWritingIn ( $server, $db, string $id)
 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.
 

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 38 of file TransactionProfiler.php.

Constructor & Destructor Documentation

◆ __construct()

Wikimedia\Rdbms\TransactionProfiler::__construct ( )

Member Function Documentation

◆ recordConnection()

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

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$isPrimary

Definition at line 207 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 265 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 => limit)
string$fname
Since
1.33

Definition at line 193 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 179 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$eventOne of the names in TransactionProfiler::EVENT_NAMES
float | int$limitMaximum event count, event value, or total event value
string$fnameCaller
Since
1.25

Definition at line 139 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 => limit)
string$fname
Since
1.26

Definition at line 164 of file TransactionProfiler.php.

References Wikimedia\Rdbms\TransactionProfiler\setExpectation().

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

◆ setLogger()

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

◆ setSilenced()

Wikimedia\Rdbms\TransactionProfiler::setSilenced ( bool $value)
Parameters
bool$value
Returns
bool Old value
Since
1.28

Definition at line 111 of file TransactionProfiler.php.

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

◆ silenceForScope()

Wikimedia\Rdbms\TransactionProfiler::silenceForScope ( )

Disable the logging of warnings until the returned object goes out of scope or is consumed.

Returns
ScopedCallback

Definition at line 122 of file TransactionProfiler.php.

References Wikimedia\Rdbms\TransactionProfiler\setSilenced().

◆ transactionWritingIn()

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

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

Definition at line 236 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 339 of file TransactionProfiler.php.


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