vtexplain
vtexplain
is a command line tool which provides information on how Vitess plans to execute a particular query. It can
be used to validate queries for compatibility with Vitess.
For a user guide that describes how to use the vtexplain
tool to explain how Vitess executes a particular SQL
statement, see Analyzing a SQL statement.
Example Usage #
Explain how Vitess will execute the query SELECT * FROM users
using the VSchema contained in vschemas.json
and the
database schema schema.sql
:
vtexplain -- --vschema-file vschema.json --schema-file schema.sql --sql "SELECT * FROM users"
Explain how the example will execute on 128 shards using Row-based replication:
vtexplain -- -shards 128 --vschema-file vschema.json --schema-file schema.sql --replication-mode "ROW" --output-mode text --sql "INSERT INTO users (user_id, name) VALUES(1, 'john')"
Options #
The following parameters apply to mysqlctl
:
Name | Type | Definition |
---|---|---|
--dbname | string | Optional database target to override normal routing |
--execution-mode | string | The execution mode to simulate -- must be set to multi, legacy-autocommit, or twopc (default "multi") |
--ks-shard-map | string | JSON map of keyspace name -> shard name -> ShardReference object. The inner map is the same as the output of FindAllShardsInKeyspace |
--ks-shard-map-file | string | File containing json blob of keyspace name -> shard name -> ShardReference object |
--mysql_server_version | string | MySQL server version to advertise. (default "8.0.30-Vitess") |
--normalize | boolean | Whether to enable vtgate normalization |
--output-mode | string | Output in human-friendly text or json (default "text") |
--planner-version | string | Sets the query planner version to use when generating the explain output. Valid values are V3 and Gen4. An empty value will use VTGate's default planner |
--replication-mode | string | The replication mode to simulate -- must be set to either ROW or STATEMENT (default "ROW") |
--schema | string | The SQL table schema |
--schema-file | string | Identifies the file that contains the SQL table schema |
--shards | int | Number of shards per keyspace. Passing --ks-shard-map/--ks-shard-map-file causes this flag to be ignored. (default 2) |
--sql | string | A list of semicolon-delimited SQL commands to analyze |
--sql-file | string | Identifies the file that contains the SQL commands to analyze |
--vschema | string | Identifies the VTGate routing schema |
--vschema-file | string | Identifies the VTGate routing schema file |
Please note that -ks-shard-map
and ks-shard-map-file
will supercede --shards
.
If you attempt to vtexplain
on a keyspace that is included in the keyspace shard map, the shards as defined in the
mapping will be used and --shards
will be ignored.
Limitations #
The VSchema must use a keyspace name. #
VTExplain requires a keyspace name for each keyspace in an input VSchema:
"keyspace_name": {
"_comment": "Keyspace definition goes here."
}
If no keyspace name is present, VTExplain will return the following error:
ERROR: initVtgateExecutor: json: cannot unmarshal bool into Go value of type map[string]json.RawMessage