Query Settings
Description of Service-level query settings and methods to set and use them.
The Couchbase Query Service is made of two components, Service-level query settings and Request-level parameters, which are set, used, and behave differently:
Setting Per | Set By | Set On | Set Via | |
---|---|---|---|---|
Service-level Query Settings |
Service Node |
The administrator at the system level |
Server side |
curl statements |
Request-level Parameters |
Request (statement) |
Each user |
Client side |
cbq command-line parameters, curl or client programming |
The Request-level Parameters overwrite their Service-level Query Setting equivalents. |
The Service-level settings will dictate the upper-bound values of the Request-level parameters.
For example, if the Service-level timeout is set to 500, then the Request-level parameter cannot be set to 501 or any value higher.
|
To set a Service-level query setting, while the Query Service is running, use the /admin/settings REST API endpoint with a curl statement.
To see a list of the current Query Settings, enter:
curl http://hostname:8093/admin/settings -u user:pword
This will output to the screen the entire list of service-level query settings:
{"completed-limit":7000,"completed-threshold":0,"controls":false,"cpuprofile":"","debug":false,"keep-alive-length":16384,"loglevel":"INFO","max-parallelism":1,"memprofile":"","pipeline-batch":16,"pipeline-cap":512,"prepared-limit":16384,"pretty":false,"profile":"off","request-size-cap":67108864,"scan-cap":512,"servicers":32,"timeout":0}
To output to a file for editing multiple settings at a single time, add the -o filename
option, for example:
curl http://hostname:8093/admin/settings -u user:pword -o settings.txt
To instantly change one setting, see details of each setting in the below Service-Level Query Settings table.
Table of Query Setting Levels and Overwrites
Some query settings are service-level or request-level only, while some are both levels with slightly different names.
Service-level Name | Request-level Name |
---|---|
Service-level Only Settings completed-limit completed-threshold cpuprofile debug keep-alive-length loglevel memprofile request-size-cap servicers _ NOTE: These settings can not be set by cbq. |
Request-level Only Settings args batch-args batch_named_args client_context compression creds encoded_plan encoding format namespace prepared scan_consistency scan_vector scan_vectors scan_wait statement $<identifier> |
Both Service-level and Request-level Settings |
|
controls max-parallelism metrics pipeline-batch pipeline-cap pretty profile readonly scan-cap signature timeout |
controls max_parallelism metrics * pipeline_batch pipeline_cap pretty profile readonly * scan_cap signature * timeout |
-
Request-level Parameters overwrite their Service-level equivalents, except
metrics
,readonly
, andsignature
.
Service-Level Query Settings
Below is a description of each query setting along with examples.
While cbq
is a sandbox to test code on your local machine, your production query settings are set with the curl
commands on your server.
These are the only two ways to set these settings, and not all settings can be set by cbq
.
Setting | Type | Default | Description | ||||
---|---|---|---|---|---|---|---|
|
int |
|
Maximum number of completed requests. As new completed requests are added, old ones are removed. Increase this when the completed request keyspace is not big enough to track the slow requests, such as when customers want a larger sample of slow requests. Example
curl http://hostname:8093/admin/settings -d '{"completed-limit":7000}' -u user:pword |
||||
|
int |
|
Cache completed query lasting longer than this many milliseconds. Specify 0 to track all requests independent of duration. Specify any negative number to track none. Example
curl http://hostname:8093/admin/settings -d '{"completed-threshold":7000}' -u user:pword |
||||
|
bool |
|
[Optional] Specifies if there should be a controls section returned with the request results. When set to
Example
cbq> \set -controls true; curl http://hostname:8093/admin/settings -d '{"controls":true}' -u user:pword |
||||
|
string |
|
The absolute path and filename to write the CPU profile to a local file. The output file includes a controls section and performance measurements, such as memory allocation and garbage collection, to pinpoint bottlenecks and ways to improve your code execution. To stop
Example
curl http://hostname:8093/admin/settings -d '{"cpuprofile":"/tmp/info.txt"}' -u user:pword |
||||
|
bool |
|
Use debug mode. When set to Example
curl http://hostname:8093/admin/settings -d '{"debug":true}' -u user:pword |
||||
|
int |
|
Maximum size of buffered result. Example
curl http://hostname:8093/admin/settings -d '{"keep-alive-length":7000}' -u user:pword |
||||
|
string |
|
Log level used in the logger. All values in descending order of data: |
||||
|
For developers |
Writes everything. |
|||||
|
For developers |
Less info than debug. |
|||||
|
For admin & customers |
Lists warnings & errors. |
|||||
|
For admin |
Only abnormal items. |
|||||
|
For admin |
Only errors to be fixed. |
|||||
|
For admin |
Major items, like crashes. |
|||||
|
Doesn’t write anything. |
||||||
Example
curl http://hostname:8093/admin/settings -d '{"loglevel":"DEBUG"}' -u user:pword |
|||||||
|
int |
|
[Optional] Specifies the maximum parallelism for the query. A zero or negative value means the number of logical CPUs will be used as the parallelism for the query. A server-wide If a request includes Example
cbq> \set -max_parallelism 3; curl http://hostname:8093/admin/settings -d '{"max_parallelism":0}' -u user:pword |
||||
|
string |
|
Filename to write the diagnostic memory usage log. To stop
Example
curl http://hostname:8093/admin/settings -d '{"memprofile":"/tmp/memory-usage.log"}' -u user:pword |
||||
|
int |
|
[Optional] Controls the number of items execution operators can batch for Fetch from the KV. Example
cbq> \set -pipeline_batch 64; curl http://hostname:8093/admin/settings -d '{"pipeline-batch":64' -u user:pword |
||||
|
int |
|
[Optional] Maximum number of items each execution operator can buffer between various operators. Example
cbq> \set -pipeline_cap 1024; curl http://hostname:8093/admin/settings -d '{"pipeline-cap":1024}' -u user:pword |
||||
|
int |
|
[Optional] Maximum number of Prepared statements in the cache. When this cache reaches the limit, the least recently used prepared statements will be discarded as new prepared statements are created. Example
curl http://hostname:8093/admin/settings -d '{"prepared-limit":65536}' -u user:pword |
||||
|
bool |
|
[Optional] Specifies the query results returned in pretty format. There is also a server-wide Example
cbq> \set -pretty true; curl http://hostname:8093/admin/settings -d '{"pretty":false}' -u user:pword |
||||
|
string |
|
[Optional] Specifies if there should be a profile section returned with the request results. The valid values are:
Example
cbq> \set -profile "phases"; curl http://hostname:8093/admin/settings -d '{"profile":"phases"}' -u user:pword |
||||
|
int |
|
Maximum size of a request. Example
curl http://hostname:8093/admin/settings -d '{"request-size-cap":70000}' -u user:pword |
||||
|
int |
|
[Optional] Maximum buffered channel size between the indexer client and the query service for index scans. This parameter controls when to use scan backfill. Use Smaller values reduce GC while larger values reduce indexer backfill. The index channel capacity is configurable per request. Example
cbq> \set -scan_cap 1024; curl http://hostname:8093/admin/settings -d '{"scan-cap":1024}' -u user:pword |
||||
|
int |
|
The number of service threads for the query. Example
curl http://hostname:8093/admin/settings -d '{"servicers":8}' -u user:pword |
||||
|
string (duration format) |
|
[Optional] Maximum time to spend on the request before timing out. The default value means no timeout is applied and the request runs for however long it takes.
Its format includes an amount and a mandatory unit. Valid units are:
Ex: "10ms" (10 milliseconds) and "0.5s" (half a second). Specify Example
cbq> \set -timeout "30m"; curl http://hostname:8093/admin/settings -d '{"timeout":"30m"}' -u user:pword |
Request-Level Parameters
This table contains details of all the parameters that can be passed in a request to the /query/service endpoint:
Parameter Name | Type | Default | Description | |||||
---|---|---|---|---|---|---|---|---|
|
list |
[Optional] If the statement has 1 or more positional parameters, this parameter needs to be in the request; this is a list of JSON values, one for each positional parameter in the statement.
Example
cbq > \set -args ["LAX", 6]; See section Named Parameters VS. Positional Parameters for details. |
||||||
|
list of list |
[Optional] Applies to POST requests containing UPDATE/INSERT/DELETE statements. DML statements containing positional parameters. Example
INSERT INTO location (id, name) VALUES ($1, $2) These require the values to be given in
|
||||||
|
list of object |
[Optional] Applies to POST requests only, containing a UPDATE/INSERT/DELETE statement. DML statements containing named parameters. Example
INSERT INTO location (id, name) VALUES ($id, $n) These require the values to be given in
|
||||||
|
string |
[Optional] A piece of data supplied by the client that is echoed in the response, if present. N1QL is agnostic about the content of this parameter; it is just echoed in the response. Note: 1) Maximum allowed size is 64 characters; all others will be cut. 2) If it contains an escape character (‘/’) or quote ("), it will be rejected as Error code 1110. |
||||||
|
string |
|
[Optional] Compression format to use for response data on the wire. Possible values are Values are case-insensitive. Example
cbq> \set -compression "zip"; |
|||||
|
bool |
|
[Optional] Specifies if there should be a controls section returned with the request results. When set to
Example
cbq> \set -controls true; curl http://hostname:8093/admin/settings -d '{"controls":true}' -u user:pword |
|||||
|
list |
[Optional] Specify the login credentials in the form of You can specify credentials for different buckets by separating them with a comma. If credentials are supplied in the request header, then Example
cbq> \set -creds travel-sample user:pword, beer-sample user:pword; |
||||||
|
string |
[Optional] For later, multiple executions, a query can be prepared, which results in five properties, of which one is called encoded_plan. This can then be used to execute the query. Example: Prepare the query result of the most expensive hotel. $ curl -v http://localhost:8093/query/service \ -d 'statement=PREPARE pricy_hotel FROM SELECT name, max(price) FROM `travel-sample` WHERE type="hotel"; Response: { "requestID": "a339a496-7ed5-4625-9c64-0d7bf584a1bd", "signature": "json", "results": [ { "encoded_plan": "H4sIAAAJbogA/5yRQU/6QBDFvwpZ/gdIIAAA==", "name": "fave_tweets", Use the $ curl -v http://localhost:8093/query/service -H "Content-Type: application/json" -d \ '{ "prepared":"pricy_hotel", "encoded_plan":"H4sIAAAJbogA/5yRQU/6QBDFvwpZ/gdIIAAA==", "$r":9.5 }' Both the encoded plan and the prepared N1QL statement output the same. |
||||||
|
string |
|
[Optional] Desired character encoding for the query results. Only possible value is |
|||||
|
string |
|
[Optional] Desired format for the query results. Possible values are Values are case-insensitive. Example
cbq> \set -format "XML"; |
|||||
|
string |
|
[Optional] Specifies the maximum parallelism for the query. A zero or negative value means the number of logical CPUs will be used as the parallelism for the query. A server-wide If a request includes Example
cbq> \set -max-parallelism 3; curl http://hostname:8093/admin/settings -d '{"max-parallelism":0}' -u user:pword |
|||||
|
bool |
|
[Optional] Specifies that metrics should be returned with query results. There is also a server wide Example
cbq> \set -metrics false; curl http://localhost:8093/query/service -u user:pword -d 'statement=select * from default&metrics=true' |
|||||
|
string |
[Optional] Specifies the namespace to use. There is a server-wide namespace parameter, which is used if a request does not specify a namespace. Example
cbq> \set -namespace travel-sample; |
||||||
|
int |
[Optional] Controls the number of items execution operators can batch for Fetch from the KV. Example
cbq> \set -pipeline_batch 64; curl http://hostname:8093/admin/settings -d '{"pipeline-batch":64}' -u user:pword |
||||||
|
int |
[Optional] Maximum number of items each execution operator can buffer between various operators. Example
cbq> \set -pipeline_cap 1024; curl http://hostname:8093/admin/settings -d '{"pipeline-cap":1024}' -u user:pword |
||||||
|
string |
[Required if The prepared form of the N1QL statement to be executed.
Example: Prepare the query result of the most expensive hotel. $ curl -v http://localhost:8093/query/service \ -d 'statement=PREPARE pricy_hotel FROM SELECT name, max(price) FROM `travel-sample` WHERE type="hotel"; Response: { "requestID": "a339a496-7ed5-4625-9c64-0d7bf584a1bd", "signature": "json", "results": [ { "encoded_plan": "H4sIAAAJbogA/5yRQU/6QBDFvwpZ/gdIIAAA==", "name": "fave_tweets", Use the $ curl -v http://localhost:8093/query/service -H "Content-Type: application/json" -d \ '{ "prepared":"pricy_hotel", "encoded_plan":"H4sIAAAJbogA/5yRQU/6QBDFvwpZ/gdIIAAA==", "$r":9.5 }' Both the encoded plan and the prepared N1QL statement output the same. |
||||||
|
bool |
|
[Optional] Specifies the query results returned in pretty format.
Example
cbq> \set -pretty true; curl http://hostname:8093/admin/settings -d '{"pretty":false}' -u user:pword |
|||||
|
string |
|
[Optional] Specifies if there should be a profile section returned with the request results. The valid values are:
Example
cbq> \set -profile "phases"; curl http://hostname:8093/admin/settings -d '{"profile":"phases"}' -u user:pword |
|||||
|
bool |
|
[Optional] Controls whether a query can change a resulting recordset. If
Example
cbq> \set -readonly true; |
|||||
|
int |
|
[Optional] Maximum buffered channel size between the indexer client and the query service for index scans. This parameter controls when to use scan backfill. Use Smaller values reduce GC while larger values reduce indexer backfill. The index channel capacity is configurable per request. Example
cbq> \set -scan_cap 1024; curl http://hostname:8093/admin/settings -d '{"scan-cap":1024}' -u user:pword |
|||||
|
string |
|
[Optional] Specify the consistency guarantee/constraint for index scanning. The valid values are:
Values are case-insensitive. Example
cbq> \set -scan_consistency "at_plus"; |
|||||
|
list or object |
[ Specify the lower bound vector timestamp for one bucket when using Scan vectors are built of
Example
scan_vector={ "5 ": [5409393,"VB5ID"], "19": [47574574, "VB19ID"] } Scan vectors have two forms:
For queries referencing multiple buckets, use |
||||||
|
object |
[ A map from bucket names to scan vectors.
See The scan vectors can be Full or Sparse. |
||||||
|
string (duration format) |
|
[Optional] Can be supplied with Specifies the maximum time the client is willing to wait for an index to catch up to the vector timestamp in the request.
Its format includes an amount and a mandatory unit. Valid units are:
Ex:
Example
cbq> \set -scan_wait "30m"; |
|||||
|
bool |
|
[Optional] Include a header for the results schema in the response.
Example
cbq> \set -signature false; curl http://localhost:8093/query/service -u user:pword -d 'statement=select * from default&signature=false' |
|||||
|
string |
[Required if Any valid N1QL statement for a POST request, or a read-only N1QL statement (SELECT, EXPLAIN) for a GET request.
|
||||||
|
string (duration format) |
|
[Optional] Maximum time to spend on the request before timing out. The default value means no timeout is applied and the request runs for however long it takes.
Its format includes an amount and a mandatory unit. Valid units are:
Ex:
Example
cbq> \set -timeout "30m"; curl http://hostname:8093/admin/settings -d '{"timeout":"30m"}' -u user:pword |
|||||
|
json_value |
[Optional] If the A named parameter consists of two parts:
Named parameters apply to See section Named Parameters VS. Positional Parameters for examples. |
Named Parameters VS. Positional Parameters
Named Parameters use a variable name to refer to each one, while Positional Parameters refer to the position each variable is used. As summarized in the below table, these two types of requests should contain the following parameters:
Statement | Args | |
---|---|---|
Named Parameters |
SELECT detail FROM emp WHERE name = $nval AND age > $aval |
$nval = "smith" $aval = 45 |
Positional Parameters |
SELECT detail FROM emp WHERE name = $1 AND age > $2 |
[ "smith", 45 ] |
SELECT detail FROM emp WHERE name = ? AND age > ? |
Positional Parameters can also be specified in a statement using ? as an alternative way to specify the same query. |
For more details about N1QL REST API, see N1QL REST API.
For more details about API content and settings, see REST API reference.