MediaWiki REL1_41
|
Detect high-contention DB queries via profiling calls. More...
Inherits LoggerAwareInterface, and StatsdAwareInterface.
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. | |
Detect high-contention DB queries via profiling calls.
This class is meant to work with an IDatabase object, which manages queries.
Definition at line 41 of file TransactionProfiler.php.
Wikimedia\Rdbms\TransactionProfiler::__construct | ( | ) |
Definition at line 108 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\setLogger(), and Wikimedia\Rdbms\TransactionProfiler\setStatsdDataFactory().
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.
string | $server | DB server |
string | null | $db | DB name |
bool | $isPrimary |
Definition at line 250 of file TransactionProfiler.php.
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)
string | GeneralizedSql | Query | $query | Function name or generalized SQL |
float | $sTime | Starting UNIX wall time |
bool | $isWrite | Whether this is a write query |
int | null | $rowCount | Number of affected/read rows |
string | $trxId | Transaction id |
string | null | $serverName | db host name like db1234 |
Definition at line 308 of file TransactionProfiler.php.
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)
array | $expects | Map of (event name => limit), { |
string | $fname |
Definition at line 236 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\setExpectations().
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)
Definition at line 222 of file TransactionProfiler.php.
Wikimedia\Rdbms\TransactionProfiler::setExpectation | ( | string | $event, |
$limit, | |||
string | $fname ) |
Set performance expectations.
With conflicting expectations, the most narrow ones will be used
string | $event | Event name, { |
float | int | $limit | Maximum event count, event value, or total event value |
string | $fname | Caller |
Definition at line 182 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\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
array | $expects | Map of (event name => limit), { |
string | $fname |
Definition at line 207 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\setExpectation().
Referenced by Wikimedia\Rdbms\TransactionProfiler\redefineExpectations().
Wikimedia\Rdbms\TransactionProfiler::setLogger | ( | LoggerInterface | $logger | ) |
Definition at line 120 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\__construct().
Wikimedia\Rdbms\TransactionProfiler::setMockTime | ( | & | $time | ) |
float | null | &$time | Mock UNIX timestamp for testing |
Definition at line 567 of file TransactionProfiler.php.
Wikimedia\Rdbms\TransactionProfiler::setRequestMethod | ( | ?string | $method | ) |
?string | $method | HTTP method; null for CLI mode |
Definition at line 132 of file TransactionProfiler.php.
Wikimedia\Rdbms\TransactionProfiler::setStatsdDataFactory | ( | StatsdDataFactoryInterface | $statsFactory | ) |
Sets a StatsdDataFactory instance on the object.
StatsdDataFactoryInterface | $statsFactory |
Implements StatsdAwareInterface.
Definition at line 124 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\__construct().
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.
string | $type | Class EXPECTATION_* constant [default: TransactionProfiler::EXPECTATION_ANY] |
Definition at line 149 of file TransactionProfiler.php.
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.
string | $server | DB server |
string | null | $db | DB name |
string | $id | ID string of transaction |
Definition at line 279 of file TransactionProfiler.php.
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.
string | $server | DB server |
string | null | $db | DB name |
string | $id | ID string of transaction |
float | $writeTime | Time spent in write queries |
int | $affected | Number of rows affected by writes |
Definition at line 382 of file TransactionProfiler.php.
const Wikimedia\Rdbms\TransactionProfiler::EXPECTATION_ANY = 'any' |
Any type of expectation.
Definition at line 104 of file TransactionProfiler.php.
const Wikimedia\Rdbms\TransactionProfiler::EXPECTATION_REPLICAS_ONLY = 'replicas-only' |
Any expectations about replica usage never occurring.
Definition at line 106 of file TransactionProfiler.php.