MediaWiki master
Wikimedia\Rdbms\TransactionProfiler Class Reference

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

Inherits LoggerAwareInterface, and StatsdAwareInterface.

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)
 
 setMockTime (&$time)
 
 setRequestMethod (?string $method)
 
 setStatsdDataFactory (StatsdDataFactoryInterface $statsFactory)
 Sets a StatsdDataFactory instance on the object.
 
 silenceForScope (string $type=self::EXPECTATION_ANY)
 Temporarily ignore expectations until the returned object goes out of scope.
 
 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.
 

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 41 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 250 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 | Query$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 308 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 236 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 222 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 182 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 207 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 568 of file TransactionProfiler.php.

◆ setRequestMethod()

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

Definition at line 132 of file TransactionProfiler.php.

◆ setStatsdDataFactory()

Wikimedia\Rdbms\TransactionProfiler::setStatsdDataFactory ( StatsdDataFactoryInterface $statsFactory)

Sets a StatsdDataFactory instance on the object.

Parameters
StatsdDataFactoryInterface$statsFactory
Returns
null

Implements StatsdAwareInterface.

Definition at line 124 of file TransactionProfiler.php.

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

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

◆ 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 279 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 382 of file TransactionProfiler.php.

Member Data Documentation

◆ EXPECTATION_ANY

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

Any type of expectation.

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


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