|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Copyright 1997-2012 the PHP Documentation Group.
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_clear_cache
Flush all cache contents
Description
bool mysqlnd_qc_clear_cache();
Flush all cache contents.
Flushing the cache is a storage handler responsibility. All built-in storage handler but the memcache storage handler support flushing the cache. The memcache
storage handler cannot flush its cache contents.
User-defined storage handler may or may not support the operation.
Parameters
This function has no parameters.
Return Values
Returns TRUE on success or FALSE on failure.
A return value of FALSE indicates that flushing all cache contents has failed
or the operation is not supported by the active storage handler. Applications must not expect that calling
the function will always flush the cache.
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_get_available_handlers
Returns a list of available storage handler
Description
array mysqlnd_qc_get_available_handlers();
Which storage are available depends on the compile time configuration of the query cache plugin. The default storage handler is always available. All other storage handler must be
enabled explicitly when building the extension.
Parameters
This function has no parameters.
Return Values
Returns an array of available built-in storage handler. For each storage handler the version number and version string is given.
Examples
Example 21.324. mysqlnd_qc_get_available_handlersexample
<?phpvar_dump(mysqlnd_qc_get_available_handlers());?>
The above examples will output:
array(5) { ["default"]=> array(2) { ["version"]=> string(5) "1.0.0" ["version_number"]=> int(100000) } ["user"]=> array(2) { ["version"]=> string(5) "1.0.0" ["version_number"]=> int(100000) } ["APC"]=> array(2) { ["version"]=> string(5) "1.0.0" ["version_number"]=> int(100000) } ["MEMCACHE"]=> array(2) { ["version"]=> string(5) "1.0.0" ["version_number"]=> int(100000) } ["sqlite"]=> array(2) { ["version"]=> string(5) "1.0.0" ["version_number"]=> int(100000) }}
See Also
| Installation |
mysqlnd_qc_set_storage_handler
|
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_get_cache_info
Returns information on the current handler, the number of cache entries and cache entries, if available
Description
array mysqlnd_qc_get_cache_info();
Parameters
This function has no parameters.
Return Values
Returns information on the current handler, the number of cache entries and cache entries, if available. If and what data will be returned for the cache entries is subject to the active storage handler. Storage handler are free to return any data. Storage handler are recommended to return at least the data provided by the default handler, if technically possible.
The scope of the information is the PHP process. Depending on the PHP deployment model a process may serve one or more web requests.
Values are aggregated for all cache activities on a per storage handler basis. It is not possible to tell
how much queries originating from mysqli, PDO_MySQL or mysql.API calls have contributed to
the aggregated data values. Use mysqlnd_qc_get_core_stats
to get timing data aggregated for all storage handlers.
Array of cache information
handler string
The active storage handler.
All storage handler. Since 1.0.0.
handler_version string The version of the active storage handler.
All storage handler. Since 1.0.0.
num_entries int The number of cache entries. The value depends on the storage handler in use.
The default, APC and SQLite storage handler provide the actual number of cache entries.
The MEMCACHE storage handler always returns 0. MEMCACHE does not
support counting the number of cache entries.
If a user defined handler is used, the number of entries of the data property is reported.
Since 1.0.0.
data array
The version of the active storage handler.
Additional storage handler dependent data on the cache entries. Storage handler are requested to provide similar and comparable information. A user defined storage handler is free to return any data.
Since 1.0.0.
The following information is provided by the default storage handler for the data property.
The data property holds a hash. The hash is indexed by the internal
cache entry identifier of the storage handler. The cache entry identifier is human-readable and
contains the query string leading to the cache entry. Please, see also the example below. The
following data is given for every cache entry.
statistics array Statistics of the cache entry.
Since 1.0.0.
| Property | Description | Version |
|---|---|---|
rows |
Number of rows of the cached result set. | Since 1.0.0. |
stored_size |
The size of the cached result set in bytes. This is the size of the payload. The value is not suited for calculating the total memory consumption of all cache entries including the administrative overhead of the cache entries. | Since 1.0.0. |
cache_hits |
How often the cached entry has been returned. | Since 1.0.0. |
run_time |
Run time of the statement to which the cache entry belongs. This is the
run time of the uncached statement. It is the time between sending the
statement to MySQL receiving a reply from MySQL. Run time saved by using
the query cache plugin can be calculated like this: cache_hits * ((run_time - avg_run_time) +
(store_time - avg_store_time)).
|
Since 1.0.0. |
store_time |
Store time of the statements result set to which the cache entry belongs. This is the time it took to fetch and store the results of the uncached statement. | Since 1.0.0. |
min_run_time |
Minimum run time of the cached statement. How long it took to find the statement in the cache. | Since 1.0.0. |
min_store_time |
Minimum store time of the cached statement. The time taken for fetching the cached result set from the storagemedium and decoding | Since 1.0.0. |
avg_run_time |
Average run time of the cached statement. | Since 1.0.0. |
avg_store_time |
Average store time of the cached statement. | Since 1.0.0. |
max_run_time |
Average run time of the cached statement. | Since 1.0.0. |
max_store_time |
Average store time of the cached statement. | Since 1.0.0. |
valid_until |
Timestamp when the cache entry expires. | Since 1.1.0. |
metadata array
Metadata of the cache entry. This is the metadata provided by MySQL together with the result set of the statement in question. Different versions of the MySQL server may return different metadata. Unlike with some of the PHP MySQL extensions no attempt is made to hide MySQL server version dependencies and version details from the caller. Please, refer to the MySQL C API documentation that belongs to the MySQL server in use for further details.
The metadata list contains one entry for every column.
Since 1.0.0.
| Property | Description | Version |
|---|---|---|
name |
The field name. Depending on the MySQL version this may be the fields alias name. | Since 1.0.0. |
org_name |
The field name. | Since 1.0.0. |
table |
The table name. If an alias name was used for the table, this usually holds the alias name. | Since 1.0.0. |
org_table |
The table name. | Since 1.0.0. |
db |
The database/schema name. | Since 1.0.0. |
max_length |
The maximum width of the field. Details may vary by MySQL server version. | Since 1.0.0. |
length |
The width of the field. Details may vary by MySQL server version. | Since 1.0.0. |
type |
The data type of the field. Details may vary by the MySQL server in use.
This is the MySQL C API type constants value. It is recommended to use
type constants provided by the mysqli
extension to test for its meaning. You should not test for certain type
values bycomparing with certain numbers.
|
Since 1.0.0. |
The APC storage handler returns the same information for the data
property but no metadata. The metadata
of a cache entry is set to NULL.
The MEMCACHE storage handler does not fill the data property.
Statistics are not available on a per cache entry basis with the MEMCACHE storage handler.
A user defined storage handler is free to provide any data.
Examples
Example 21.325. mysqlnd_qc_get_cache_infoexample
The example shows the output from the built-in default storage handler. Other storage handler may report different data.
<?php/* Populate the cache, e.g. using mysqli */$mysqli = new mysqli("host", "user", "password", "schema");$mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/SELECT id FROM test");/* Display cache information */var_dump(mysqlnd_qc_get_cache_info());?>
The above examples will output:
array(4) { ["num_entries"]=> int(1) ["handler"]=> string(7) "default" ["handler_version"]=> string(5) "1.0.0" ["data"]=> array(1) { ["Localhost via UNIX socket 3306 user schema|/*qc=on*/SELECT id FROM test"]=> array(2) { ["statistics"]=> array(11) { ["rows"]=> int(6) ["stored_size"]=> int(101) ["cache_hits"]=> int(0) ["run_time"]=> int(471) ["store_time"]=> int(27) ["min_run_time"]=> int(0) ["max_run_time"]=> int(0) ["min_store_time"]=> int(0) ["max_store_time"]=> int(0) ["avg_run_time"]=> int(0) ["avg_store_time"]=> int(0) } ["metadata"]=> array(1) { [0]=> array(8) { ["name"]=> string(2) "id" ["orig_name"]=> string(2) "id" ["table"]=> string(4) "test" ["orig_table"]=> string(4) "test" ["db"]=> string(4) "schema" ["max_length"]=> int(1) ["length"]=> int(11) ["type"]=> int(3) } } } }}
See Also
mysqlnd_qc_get_core_stats |
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_get_core_stats
Statistics collected by the core of the query cache
Description
array mysqlnd_qc_get_core_stats();
Returns an array of statistics collected by the core of the cache plugin. The same data fields will be reported for any storage handler because the data is collected by the core.
The PHP configuration setting mysqlnd_qc.collect_statistics
controls the collection of statistics. The collection of statistics is disabled by default for performance
reasons. Disabling the collection of statistics will also disable the collection of time related statistics.
The PHP configuration setting mysqlnd_qc.collect_time_statistics
controls the collection of time related statistics.
The scope of the core statistics is the PHP process. Depending on your
deployment model a PHP process may handle one or multiple requests.
Statistics are aggregated for all cache entries and all storage handler. It is not possible to tell how much
queries originating from mysqli, PDO_MySQL or
mysql API calls have contributed to the aggregated data values.
Parameters
This function has no parameters.
Return Values
Array of core statistics
| Statistic | Description | Version |
|---|---|---|
cache_hit |
Statement is considered cacheable and cached data has been reused. Statement is considered cacheable and a cache miss happened but the statement got cached by someone else while we process it and thus we can fetch the result from the refreshed cache. | Since 1.0.0. |
cache_miss |
Statement is considered cacheable...
|
Since 1.0.0. |
cache_put |
Statement is considered cacheable and has been added to the cache. Take care when calculating
derived statistics. Storage handler with a storage life time beyond process scope may report
cache_put = 0 together with cache_hit >
0, if another process has filled the cache. You may want to use num_entries from mysqlnd_qc_get_cache_info if the handler supports it ( default, APC).
|
Since 1.0.0. |
query_should_cache |
Statement is considered cacheable based on query string analysis. The statement may or may not
be added to the cache. See also cache_put.
|
Since 1.0.0. |
query_should_not_cache |
Statement is considered not cacheable based on query string analysis. | Since 1.0.0. |
query_not_cached |
Statement is considered not cacheable or it is considered cachable but the storage handler has not returned a hash key for it. | Since 1.0.0. |
query_could_cache |
Statement is considered cacheable...
|
Since 1.0.0. |
query_found_in_cache |
Statement is considered cacheable and we have found it in the cache but we have not replayed the cached data yet and we have not send the result set to the client yet. This is not considered a cache hit because the client might not fetch the result or the cached data may be faulty. | Since 1.0.0. |
query_uncached_other |
Statement is considered cacheable and it may or may not be in the cache already but either replaying cached data has failed, no result set is available or some other error has happened. | |
query_uncached_no_table |
Statement has not been cached because the result set has at least one column which has no table
name in its meta data. An example of such a query is SELECT
SLEEP(1). To cache those statements you have to change default value of the PHP
configuration directive mysqlnd_qc.cache_no_table and set mysqlnd_qc.cache_no_table = 1. Often, it is not desired to cache
such statements.
|
Since 1.0.0. |
query_uncached_use_result |
Statement would have been cached if a buffered result set had been used. The situation is also
considered as a cache miss and cache_miss will be incremented as
well.
|
Since 1.0.0. |
query_aggr_run_time_cache_hit |
Aggregated run time (ms) of all cached queries. Cached queries are those which have incremented
cache_hit.
|
Since 1.0.0. |
query_aggr_run_time_cache_put |
Aggregated run time (ms) of all uncached queries that have been put into the cache. See also
cache_put.
|
Since 1.0.0. |
query_aggr_run_time_total |
Aggregated run time (ms) of all uncached and cached queries that have been inspected and executed by the query cache. | Since 1.0.0. |
query_aggr_store_time_cache_hit |
Aggregated store time (ms) of all cached queries. Cached queries are those which have
incremented cache_hit.
|
Since 1.0.0. |
query_aggr_store_time_cache_put |
Aggregated store time ( ms) of all uncached queries that have been
put into the cache. See also cache_put.
|
Since 1.0.0. |
query_aggr_store_time_total |
Aggregated store time (ms) of all uncached and cached queries that have been inspected and executed by the query cache. | Since 1.0.0. |
receive_bytes_recorded |
Recorded incoming network traffic ( bytes) send from MySQL to PHP.
The traffic may or may not have been added to the cache. The traffic is the total for all
queries regardless if cached or not.
|
Since 1.0.0. |
receive_bytes_replayed |
Network traffic replayed during cache. This is the total amount of incoming traffic saved because of the usage of the query cache plugin. | Since 1.0.0. |
send_bytes_recorded |
Recorded outgoing network traffic ( bytes) send from MySQL to PHP.
The traffic may or may not have been added to the cache. The traffic is the total for all
queries regardless if cached or not.
|
Since 1.0.0. |
send_bytes_replayed |
Network traffic replayed during cache. This is the total amount of outgoing traffic saved because of the usage of the query cache plugin. | Since 1.0.0. |
slam_stale_refresh |
Number of cache misses which triggered serving stale data until the client causing the cache miss has refreshed the cacheentry. | Since 1.0.0. |
slam_stale_hit |
Number of cache hits while a stale cache entry gets refreshed. | Since 1.0.0. |
Examples
Example 21.326. mysqlnd_qc_get_core_statsexample
<?php/* Enable collection of statistics - default: disabled */ini_set("mysqlnd_qc.collect_statistics", 1);/* Enable collection of all timing related statistics -default: enabled but overruled by mysqlnd_qc.collect_statistics = 0 */ini_set("mysqlnd_qc.collect_time_statistics", 1);/* Populate the cache, e.g. using mysqli */$mysqli = new mysqli('host', 'user', 'password', 'schema');/* Cache miss and cache put */$mysqli->query("/*qc=on*/SELECT id FROM test");/* Cache hit */$mysqli->query("/*qc=on*/SELECT id FROM test");/* Display core statistics */var_dump(mysqlnd_qc_get_core_stats());?>
The above examples will output:
array(26) { ["cache_hit"]=> string(1) "1" ["cache_miss"]=> string(1) "1" ["cache_put"]=> string(1) "1" ["query_should_cache"]=> string(1) "2" ["query_should_not_cache"]=> string(1) "0" ["query_not_cached"]=> string(1) "0" ["query_could_cache"]=> string(1) "2" ["query_found_in_cache"]=> string(1) "1" ["query_uncached_other"]=> string(1) "0" ["query_uncached_no_table"]=> string(1) "0" ["query_uncached_no_result"]=> string(1) "0" ["query_uncached_use_result"]=> string(1) "0" ["query_aggr_run_time_cache_hit"]=> string(1) "4" ["query_aggr_run_time_cache_put"]=> string(3) "395" ["query_aggr_run_time_total"]=> string(3) "399" ["query_aggr_store_time_cache_hit"]=> string(1) "2" ["query_aggr_store_time_cache_put"]=> string(1) "8" ["query_aggr_store_time_total"]=> string(2) "10" ["receive_bytes_recorded"]=> string(2) "65" ["receive_bytes_replayed"]=> string(2) "65" ["send_bytes_recorded"]=> string(2) "29" ["send_bytes_replayed"]=> string(2) "29" ["slam_stale_refresh"]=> string(1) "0" ["slam_stale_hit"]=> string(1) "0" ["request_counter"]=> int(1) ["process_hash"]=> int(3547549858)}
See Also
| Runtime configuration |
| mysqlnd_qc.collect_statistics |
| mysqlnd_qc.time_statistics |
mysqlnd_qc_get_cache_info |
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_get_normalized_query_trace_log
Returns a normalized query trace log for each query inspected by the query cache
Description
array mysqlnd_qc_get_normalized_query_trace_log();
Returns a normalized query trace log for each query inspected by the query cache. The collection of the
trace log is disabled by default. To collect the trace log you have to set the PHP configuration directive
mysqlnd_qc.collect_normalized_query_trace to 1
Entries in the trace log are grouped by the normalized query statement. The normalized query statement is
the query statement with all statement parameter values being replaced with a question mark. For example,
the two statements SELECT id FROM test WHERE id = 1 and SELECT
id FROM test WHERE id = 2 are normalized as SELECT id FROM test WHERE id =
?. Whenever a statement is inspected by the query cache which matches the normalized statement
pattern, its statistics are grouped by the normalized statement string.
Parameters
This function has no parameters.
Return Values
An array of query log. Every list entry contains the normalized query stringand further detail information.
| Key | Description |
|---|---|
query |
Normalized statement string. |
occurences |
How many statements have matched the normalized statement string in addition to the one which has created the log entry. The value is zero if a statement has been normalized, its normalized representation has been added to the log but no further queries inspected by PECL/mysqlnd_qc have the same normalized statement string. |
eligible_for_caching |
Whether the statement could be cached. An statement eligible for caching has not necessarily been cached. It not possible to tell for sure if or how many cached statement have contributed to the aggregated normalized statement log entry. However, comparing the minimum and average run time one can make an educated guess. |
avg_run_time |
The average run time of all queries contributing to the query log entry. The run time is the time between sending the query statement to MySQL and receiving an answer from MySQL. |
avg_store_time |
The average store time of all queries contributing to the query log entry. The store time is the time needed to fetch a statements result set from the server to the client and, storing it on the client. |
min_run_time |
The minimum run time of all queries contributing to the query log entry. |
min_store_time |
The minimum store time of all queries contributing to the query log entry. |
max_run_time |
The maximum run time of all queries contributing to the query log entry. |
max_store_time |
The maximum store time of all queries contributing to the query logentry. |
Examples
Example 21.327. mysqlnd_qc_get_normalized_query_trace_logexample
mysqlnd_qc.collect_normalized_query_trace=1
<?php/* Connect, create and populate test table */$mysqli = new mysqli("host", "user", "password", "schema", "port", "socket");$mysqli->query("DROP TABLE IF EXISTS test");$mysqli->query("CREATE TABLE test(id INT)");$mysqli->query("INSERT INTO test(id) VALUES (1), (2)");/* not cached */$res = $mysqli->query("SELECT id FROM test WHERE id = 1");var_dump($res->fetch_assoc());$res->free();/* cache put */$res = $mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" . "SELECT id FROM test WHERE id = 2");var_dump($res->fetch_assoc());$res->free();/* cache hit */$res = $mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" . "SELECT id FROM test WHERE id = 2");var_dump($res->fetch_assoc());$res->free();var_dump(mysqlnd_qc_get_normalized_query_trace_log());?>
The above examples will output:
array(1) { ["id"]=> string(1) "1"}array(1) { ["id"]=> string(1) "2"}array(1) { ["id"]=> string(1) "2"}array(4) { [0]=> array(9) { ["query"]=> string(25) "DROP TABLE IF EXISTS test" ["occurences"]=> int(0) ["eligible_for_caching"]=> bool(false) ["avg_run_time"]=> int(0) ["min_run_time"]=> int(0) ["max_run_time"]=> int(0) ["avg_store_time"]=> int(0) ["min_store_time"]=> int(0) ["max_store_time"]=> int(0) } [1]=> array(9) { ["query"]=> string(27) "CREATE TABLE test (id INT )" ["occurences"]=> int(0) ["eligible_for_caching"]=> bool(false) ["avg_run_time"]=> int(0) ["min_run_time"]=> int(0) ["max_run_time"]=> int(0) ["avg_store_time"]=> int(0) ["min_store_time"]=> int(0) ["max_store_time"]=> int(0) } [2]=> array(9) { ["query"]=> string(40) "INSERT INTO test (id ) VALUES (? ), (? )" ["occurences"]=> int(0) ["eligible_for_caching"]=> bool(false) ["avg_run_time"]=> int(0) ["min_run_time"]=> int(0) ["max_run_time"]=> int(0) ["avg_store_time"]=> int(0) ["min_store_time"]=> int(0) ["max_store_time"]=> int(0) } [3]=> array(9) { ["query"]=> string(31) "SELECT id FROM test WHERE id =?" ["occurences"]=> int(2) ["eligible_for_caching"]=> bool(true) ["avg_run_time"]=> int(159) ["min_run_time"]=> int(12) ["max_run_time"]=> int(307) ["avg_store_time"]=> int(10) ["min_store_time"]=> int(8) ["max_store_time"]=> int(13) }}
See Also
| Runtime configuration |
| mysqlnd_qc.collect_normalized_query_trace |
| mysqlnd_qc.time_statistics |
mysqlnd_qc_get_query_trace_log
|
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_get_query_trace_log
Returns a backtrace for each query inspected by the query cache
Description
array mysqlnd_qc_get_query_trace_log();
Returns a backtrace for each query inspected by the query cache. The collection of the backtrace is disabled
by default. To collect the backtrace you have to set the PHP configuration directive mysqlnd_qc.collect_query_trace
to 1
The maximum depth of the backtrace is limited to the depth set with the PHP configuration directive mysqlnd_qc.query_trace_bt_depth.
Parameters
This function has no parameters.
Return Values
An array of query backtrace. Every list entry contains the query string, a backtrace and further detail information.
| Key | Description |
|---|---|
query |
Query string. |
origin |
Code backtrace. |
run_time |
Query run time in milliseconds. The collection of all times and the necessary gettimeofday system calls can be disabled by setting the PHP
configuration directive mysqlnd_qc.time_statistics to 0 |
store_time |
Query result set store time in milliseconds. The collection of all times and the necessary gettimeofday system calls can be disabled by setting the PHP
configuration directive mysqlnd_qc.time_statistics to 0 |
eligible_for_caching |
TRUE if query is cacheable otherwise FALSE .
|
no_table |
TRUE if the query has generated a result set and at least one
column from the result set has no table name set in its metadata. This is usually the case with
queries which one probably do not want to cache such as SELECT
SLEEP(1). By default any such query will not be added to the cache. See also PHP
configuration directive mysqlnd_qc.cache_no_table.
|
was_added |
TRUE if the query result has been put into the cache, otherwise
FALSE .
|
was_already_in_cache |
TRUE if the query result would have been added to the cache if it
was not already in the cache (cache hit). Otherwise FALSE.
|
Examples
Example 21.328. mysqlnd_qc_get_query_trace_logexample
mysqlnd_qc.collect_query_trace=1
<?php/* Connect, create and populate test table */$mysqli = new mysqli("host", "user", "password", "schema", "port", "socket");$mysqli->query("DROP TABLE IF EXISTS test");$mysqli->query("CREATE TABLE test(id INT)");$mysqli->query("INSERT INTO test(id) VALUES (1), (2)");/* not cached */$res = $mysqli->query("SELECT id FROM test WHERE id = 1");var_dump($res->fetch_assoc());$res->free();/* cache put */$res = $mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" . "SELECT id FROM test WHERE id = 2");var_dump($res->fetch_assoc());$res->free();/* cache hit */$res = $mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" . "SELECT id FROM test WHERE id = 2");var_dump($res->fetch_assoc());$res->free();var_dump(mysqlnd_qc_get_query_trace_log());?>
The above examples will output:
array(1) { ["id"]=> string(1) "1"}array(1) { ["id"]=> string(1) "2"}array(1) { ["id"]=> string(1) "2"}array(6) { [0]=> array(8) { ["query"]=> string(25) "DROP TABLE IF EXISTS test" ["origin"]=> string(102) "#0 qc.php(4): mysqli->query('DROP TABLE IF E...')#1 {main}" ["run_time"]=> int(0) ["store_time"]=> int(0) ["eligible_for_caching"]=> bool(false) ["no_table"]=> bool(false) ["was_added"]=> bool(false) ["was_already_in_cache"]=> bool(false) } [1]=> array(8) { ["query"]=> string(25) "CREATE TABLE test(id INT)" ["origin"]=> string(102) "#0 qc.php(5): mysqli->query('CREATE TABLE te...')#1 {main}" ["run_time"]=> int(0) ["store_time"]=> int(0) ["eligible_for_caching"]=> bool(false) ["no_table"]=> bool(false) ["was_added"]=> bool(false) ["was_already_in_cache"]=> bool(false) } [2]=> array(8) { ["query"]=> string(36) "INSERT INTO test(id) VALUES (1), (2)" ["origin"]=> string(102) "#0 qc.php(6): mysqli->query('INSERT INTO tes...')#1 {main}" ["run_time"]=> int(0) ["store_time"]=> int(0) ["eligible_for_caching"]=> bool(false) ["no_table"]=> bool(false) ["was_added"]=> bool(false) ["was_already_in_cache"]=> bool(false) } [3]=> array(8) { ["query"]=> string(32) "SELECT id FROM test WHERE id = 1" ["origin"]=> string(102) "#0 qc.php(9): mysqli->query('SELECT id FROM ...')#1 {main}" ["run_time"]=> int(0) ["store_time"]=> int(25) ["eligible_for_caching"]=> bool(false) ["no_table"]=> bool(false) ["was_added"]=> bool(false) ["was_already_in_cache"]=> bool(false) } [4]=> array(8) { ["query"]=> string(41) "/*qc=on*/SELECT id FROM test WHERE id = 2" ["origin"]=> string(103) "#0 qc.php(14): mysqli->query('/*qc=on*/SELECT...')#1 {main}" ["run_time"]=> int(311) ["store_time"]=> int(13) ["eligible_for_caching"]=> bool(true) ["no_table"]=> bool(false) ["was_added"]=> bool(true) ["was_already_in_cache"]=> bool(false) } [5]=> array(8) { ["query"]=> string(41) "/*qc=on*/SELECT id FROM test WHERE id = 2" ["origin"]=> string(103) "#0 qc.php(19): mysqli->query('/*qc=on*/SELECT...')#1 {main}" ["run_time"]=> int(13) ["store_time"]=> int(8) ["eligible_for_caching"]=> bool(true) ["no_table"]=> bool(false) ["was_added"]=> bool(false) ["was_already_in_cache"]=> bool(true) }}
See Also
| Runtime configuration |
| mysqlnd_qc.collect_query_trace |
| mysqlnd_qc.query_trace_bt_depth |
| mysqlnd_qc.time_statistics |
| mysqlnd_qc.cache_no_table |
mysqlnd_qc_get_normalized_query_trace_log
|
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_set_cache_condition
Set conditions for automatic caching
Description
bool mysqlnd_qc_set_cache_condition(int condition_type,
mixed condition,
mixed condition_option);
Sets a condition for automatic caching of statements which do not contain the necessary SQL hints to enable caching of them.
Parameters
condition_type Type of the condition. The only allowed value is MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN
.
condition
Parameter for the condition set with condition_type. Parameter type
and structure depend on condition_type
If condition_type equals MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN
condition must be a string. The string sets a pattern. Statements
are cached if table and database meta data entry of their result sets match the pattern. The
pattern is checked for a match with the db and org_table meta data entries provided by the underlying MySQL
client server library. Please, check the MySQL Reference manual for details about the two
entries. The db and org_table values
are concatenated with a dot (.) before matched against condition. Pattern matching supports the wildcards % and _. The wildcard % will match one or many arbitrary characters. _ will match one arbitrary character. The escape symbol is
backslash.
condition_option Option for condition. Type and structure depend on condition_type.
If condition_type equals MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN
condition_options is the TTL to be used.
Examples
Example 21.329. mysqlnd_qc_set_cache_conditionexample
<?php/* Cache all accesses to tables with the name "new%" in schema/database "db_example" for 1 second */if (!mysqlnd_qc_set_cache_condition(MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN, "db_example.new%", 1)) { die("Failed to set cache condition!");}$mysqli = new mysqli("host", "user", "password", "db_example", "port");/* cached although no SQL hint given */$mysqli->query("SELECT id, title FROM news");$pdo_mysql = new PDO("mysql:host=host;dbname=db_example;port=port", "user", "password");/* not cached: no SQL hint, no pattern match */$pdo_mysql->query("SELECT id, title FROM latest_news");/* cached: TTL 1 second, pattern match */$pdo_mysql->query("SELECT id, title FROM news");?>
Return Values
Returns TRUE on success or FALSE on FAILURE.
See Also
| Quickstart: pattern based caching |
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_set_is_select
Installs a callback which decides whether a statement is cached
Description
mixed mysqlnd_qc_set_is_select(string callback);
Installs a callback which decides whether a statement is cached.
There are several ways of hinting PELC/mysqlnd_qc to cache a query. By default, PECL/mysqlnd_qc attempts to
cache a if caching of all statements is enabled or the query string begins with a certain SQL hint. The
plugin internally calls a function named is_select() to find out. This internal
function can be replaced with a user-defined callback. Then, the user-defined callback is responsible to
decide whether the plugin attempts to cache a statement. Because the internal function is replaced with the
callback, the callback gains full control. The callback is free to ignore the configuration setting mysqlnd_qc.cache_by_default and SQL hints.
The callback is invoked for every statement inspected by the plugin. It is given the statements string as a
parameter. The callback returns FALSE if the statement shall not be cached. It
returns TRUE to make the plugin attempt to cache the statements result set, if
any. A so-created cache entry is given the default TTL set with the PHP configuration directive mysqlnd_qc.ttl. If a different TTL shall be used, the callback returns a
numeric value to be used as the TTL.
The internal is_select function is part of the internal cache storage handler
interface. Thus, a user-defined storage handler offers the same capabilities.
Parameters
This function has no parameters.
Return Values
Returns TRUE on success or FALSE on failure.
Examples
Example 21.330. mysqlnd_qc_set_is_selectexample
<?php/* callback which decides if query is cached */function is_select($query) { static $patterns = array( /* true - use default from mysqlnd_qc.ttl */ "@SELECT\s+.*\s+FROM\s+test@ismU" => true, /* 3 - use TTL = 3 seconds */ "@SELECT\s+.*\s+FROM\s+news@ismU" => 3 ); /* check if query does match pattern */ foreach ($patterns as $pattern => $ttl) { if (preg_match($pattern, $query)) { printf("is_select(%45s): cache\n", $query); return $ttl; } } printf("is_select(%45s): do not cache\n", $query); return false;}mysqlnd_qc_set_is_select("is_select");/* Connect, create and populate test table */$mysqli = new mysqli("host", "user", "password", "schema");$mysqli->query("DROP TABLE IF EXISTS test");$mysqli->query("CREATE TABLE test(id INT)");$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)");/* cache put */$mysqli->query("SELECT id FROM test WHERE id = 1");/* cache hit */$mysqli->query("SELECT id FROM test WHERE id = 1");/* cache put */$mysqli->query("SELECT * FROM test");?>
The above examples will output:
is_select( DROP TABLE IF EXISTS test): do not cacheis_select( CREATE TABLE test(id INT)): do not cacheis_select( INSERT INTO test(id) VALUES (1), (2), (3)): do not cacheis_select( SELECT id FROM test WHERE id = 1): cacheis_select( SELECT id FROM test WHERE id = 1): cacheis_select( SELECT * FROM test): cache
See Also
| Runtime configuration |
| mysqlnd_qc.ttl |
| mysqlnd_qc.cache_by_default |
mysqlnd_qc_set_user_handlers
|
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_set_storage_handler
Change current storage handler
Description
bool mysqlnd_qc_set_storage_handler(string handler);
Sets the storage handler used by the query cache. A list of available storage handler can be obtained from
mysqlnd_qc_get_available_handlers.
Which storage are available depends on the compile time configuration of the query cache plugin. The default storage handler is always available. All other storage handler must
be enabled explicitly when building the extension.
Parameters
handler Handler can be of type string representing the name of a built-in storage handler or an object
of type mysqlnd_qc_handler_default. The names of the built-in storage
handler are default, APC, MEMCACHE, sqlite.
Return Values
Returns TRUE on success or FALSE on failure.
If changing the storage handler fails a catchable fatal error will be thrown. The query cache cannot operate if the previous storage handler has been shutdown but no new storage handler has been installed.
Examples
Example 21.331. mysqlnd_qc_set_storage_handlerexample
The example shows the output from the built-in default storage handler. Other storage handler may report different data.
<?phpvar_dump(mysqlnd_qc_set_storage_handler("memcache"));if (true === mysqlnd_qc_set_storage_handler("default")) printf("Default storage handler activated");/* Catchable fatal error */var_dump(mysqlnd_qc_set_storage_handler("unknown"));?>
The above examples will output:
bool(true)Default storage handler activatedCatchable fatal error: mysqlnd_qc_set_storage_handler(): Unknown handler 'unknown' in (file) on line (line)
See Also
| Installation |
mysqlnd_qc_get_available_handlers
|
Copyright 1997-2012 the PHP Documentation Group.
mysqlnd_qc_set_user_handlers
Sets the callback functions for a user-defined procedural storage handler
Description
bool mysqlnd_qc_set_user_handlers(string get_hash,
string find_query_in_cache,
string return_to_cache,
string add_query_to_cache_if_not_exists,
string query_is_select,
string update_query_run_time_stats,
string get_stats,
string clear_cache);
Sets the callback functions for a user-defined procedural storage handler.
Parameters
get_hash
Name of the user function implementing the storage handler get_hash
functionality.
find_query_in_cache
Name of the user function implementing the storage handler find_in_cache functionality.
return_to_cache Name of the user function implementing the storage handler return_to_cache functionality.
add_query_to_cache_if_not_exists Name of the user function implementing the storage handler add_query_to_cache_if_not_exists
functionality.
query_is_select Name of the user function implementing the storage handler query_is_select functionality.
update_query_run_time_stats
Name of the user function implementing the storage handler update_query_run_time_stats
functionality.
get_stats
Name of the user function implementing the storage handler get_stats functionality.
clear_cache
Name of the user function implementing the storage handler clear_cache functionality.
Return Values
Returns TRUE on success or FALSE on FAILURE.
See Also
| Procedural user-defined storage handler example |