MediaWiki REL1_37
|
Detect high-contention DB queries via profiling calls. More...
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) | |
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. | |
Private Member Functions | |
initPlaceholderExpectations () | |
isAboveThreshold ( $value, string $expectation) | |
pingAndCheckThreshold (string $expectation) | |
reportExpectationViolated ( $expectation, $query, $actual) | |
Static Private Member Functions | |
static | queryString ( $query) |
Private Attributes | |
array< string, array > | $dbTrxHoldingLocks |
Map of (trx ID => (write start time, list of DBs involved)) | |
array[][] | $dbTrxMethodTimes |
Map of (trx ID => list of (query name, start time, end time)) | |
array< string, array > | $expect |
Map of (name => threshold value) | |
array< string, int > | $hits |
Map of (name => current hits) | |
LoggerInterface | $logger |
bool | $silenced |
Whether logging is disabled. | |
const | COUNTER_EVENT_NAMES |
List of event names with hit counters. | |
const | DB_LOCK_THRESHOLD_SEC = 3.0 |
Treat locks as long-running if they last longer than this many seconds. | |
const | EVENT_NAMES |
List of event names. | |
const | EVENT_THRESHOLD_SEC = 0.25 |
Include events in any violation logs if they last longer than this many seconds. | |
const | FLD_FNAME = 1 |
Key to the function that set the max expected value. | |
const | FLD_LIMIT = 0 |
Key to max expected value. | |
Detect high-contention DB queries via profiling calls.
This class is meant to work with an IDatabase object, which manages queries.
Definition at line 40 of file TransactionProfiler.php.
Wikimedia\Rdbms\TransactionProfiler::__construct | ( | ) |
Definition at line 93 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\initPlaceholderExpectations(), and Wikimedia\Rdbms\TransactionProfiler\setLogger().
|
private |
Definition at line 396 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\__construct(), Wikimedia\Rdbms\TransactionProfiler\redefineExpectations(), and Wikimedia\Rdbms\TransactionProfiler\resetExpectations().
|
private |
float | int | $value | |
string | $expectation |
Definition at line 410 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\recordQueryCompletion(), and Wikimedia\Rdbms\TransactionProfiler\transactionWritingOut().
|
private |
string | $expectation |
Definition at line 418 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\recordConnection(), and Wikimedia\Rdbms\TransactionProfiler\recordQueryCompletion().
|
staticprivate |
GeneralizedSql | string | $query |
Definition at line 453 of file TransactionProfiler.php.
References Wikimedia\Rdbms\GeneralizedSql\stringify().
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 209 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\pingAndCheckThreshold(), and Wikimedia\Rdbms\TransactionProfiler\reportExpectationViolated().
Wikimedia\Rdbms\TransactionProfiler::recordQueryCompletion | ( | $query, | |
float | $sTime, | ||
bool | $isWrite, | ||
?int | $rowCount | ||
) |
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 | 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 |
Definition at line 265 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\isAboveThreshold(), Wikimedia\Rdbms\TransactionProfiler\pingAndCheckThreshold(), and Wikimedia\Rdbms\TransactionProfiler\reportExpectationViolated().
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 => limit) |
string | $fname |
Definition at line 195 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\initPlaceholderExpectations(), and Wikimedia\Rdbms\TransactionProfiler\setExpectations().
|
private |
string | $expectation | |
string | GeneralizedSql | $query | |
float | int | $actual |
Definition at line 429 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\FLD_FNAME, and Wikimedia\Rdbms\TransactionProfiler\FLD_LIMIT.
Referenced by Wikimedia\Rdbms\TransactionProfiler\recordConnection(), Wikimedia\Rdbms\TransactionProfiler\recordQueryCompletion(), and Wikimedia\Rdbms\TransactionProfiler\transactionWritingOut().
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 181 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\initPlaceholderExpectations().
Wikimedia\Rdbms\TransactionProfiler::setExpectation | ( | string | $event, |
$limit, | |||
string | $fname | ||
) |
Set performance expectations.
With conflicting expectations, the most narrow ones will be used
string | $event | One of the names in TransactionProfiler::EVENT_NAMES |
float | int | $limit | Maximum event count, event value, or total event value |
string | $fname | Caller |
Definition at line 141 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 => limit) |
string | $fname |
Definition at line 166 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\setExpectation().
Referenced by Wikimedia\Rdbms\TransactionProfiler\redefineExpectations().
Wikimedia\Rdbms\TransactionProfiler::setLogger | ( | LoggerInterface | $logger | ) |
Definition at line 104 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\$logger.
Referenced by Wikimedia\Rdbms\TransactionProfiler\__construct().
Wikimedia\Rdbms\TransactionProfiler::setSilenced | ( | bool | $value | ) |
bool | $value |
Definition at line 113 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\$silenced.
Referenced by Wikimedia\Rdbms\TransactionProfiler\silenceForScope().
Wikimedia\Rdbms\TransactionProfiler::silenceForScope | ( | ) |
Disable the logging of warnings until the returned object goes out of scope or is consumed.
Definition at line 124 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\setSilenced().
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 238 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 332 of file TransactionProfiler.php.
References Wikimedia\Rdbms\TransactionProfiler\isAboveThreshold(), and Wikimedia\Rdbms\TransactionProfiler\reportExpectationViolated().
|
private |
Map of (trx ID => (write start time, list of DBs involved))
Definition at line 52 of file TransactionProfiler.php.
|
private |
Map of (trx ID => list of (query name, start time, end time))
Definition at line 58 of file TransactionProfiler.php.
|
private |
Map of (name => threshold value)
Definition at line 44 of file TransactionProfiler.php.
|
private |
Map of (name => current hits)
Definition at line 46 of file TransactionProfiler.php.
|
private |
Definition at line 42 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\setLogger().
|
private |
Whether logging is disabled.
Definition at line 61 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\setSilenced().
|
private |
List of event names with hit counters.
Definition at line 81 of file TransactionProfiler.php.
|
private |
Treat locks as long-running if they last longer than this many seconds.
Definition at line 64 of file TransactionProfiler.php.
|
private |
List of event names.
Definition at line 69 of file TransactionProfiler.php.
|
private |
Include events in any violation logs if they last longer than this many seconds.
Definition at line 66 of file TransactionProfiler.php.
|
private |
Key to the function that set the max expected value.
Definition at line 91 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\reportExpectationViolated().
|
private |
Key to max expected value.
Definition at line 89 of file TransactionProfiler.php.
Referenced by Wikimedia\Rdbms\TransactionProfiler\reportExpectationViolated().