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:

NameTypeDefinition
--dbnamestringOptional database target to override normal routing
--execution-modestringThe execution mode to simulate -- must be set to multi, legacy-autocommit, or twopc (default "multi")
--ks-shard-mapstringJSON map of keyspace name -> shard name -> ShardReference object. The inner map is the same as the output of FindAllShardsInKeyspace
--ks-shard-map-filestringFile containing json blob of keyspace name -> shard name -> ShardReference object
--mysql_server_versionstringMySQL server version to advertise. (default "8.0.30-Vitess")
--normalizebooleanWhether to enable vtgate normalization
--output-modestringOutput in human-friendly text or json (default "text")
--planner-versionstringSets 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-modestringThe replication mode to simulate -- must be set to either ROW or STATEMENT (default "ROW")
--schemastringThe SQL table schema
--schema-filestringIdentifies the file that contains the SQL table schema
--shardsintNumber of shards per keyspace. Passing --ks-shard-map/--ks-shard-map-file causes this flag to be ignored. (default 2)
--sqlstringA list of semicolon-delimited SQL commands to analyze
--sql-filestringIdentifies the file that contains the SQL commands to analyze
--vschemastringIdentifies the VTGate routing schema
--vschema-filestringIdentifies 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