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 22.321. mysqlnd_qc_get_available_handlers
example
<?php var_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 storage medium 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 by
comparing 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 22.322. mysqlnd_qc_get_cache_info
example
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 cache entry. | Since 1.0.0. |
slam_stale_hit | Number of cache hits while a stale cache entry gets refreshed. | Since 1.0.0. |
Examples
Example 22.323. mysqlnd_qc_get_core_stats
example
<?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 log entry. |
Examples
Example 22.324. mysqlnd_qc_get_normalized_query_trace_log
example
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 22.325. mysqlnd_qc_get_query_trace_log
example
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 22.326. mysqlnd_qc_set_cache_condition
example
<?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 22.327. mysqlnd_qc_set_is_select
example
<?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 cache is_select( CREATE TABLE test(id INT)): do not cache is_select( INSERT INTO test(id) VALUES (1), (2), (3)): do not cache is_select( SELECT id FROM test WHERE id = 1): cache is_select( SELECT id FROM test WHERE id = 1): cache is_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 22.328. mysqlnd_qc_set_storage_handler
example
The example shows the output from the built-in default storage handler. Other storage handler may report different data.
<?php
var_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 activated Catchable 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 |

User Comments
Add your own comment.