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:

  1. 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:

  1. 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:

  1. "keyspace_name": {
  2. "_comment": "Keyspace definition goes here."
  3. }

If no keyspace name is present, VTExplain will return the following error:

  1. ERROR: initVtgateExecutor: json: cannot unmarshal bool into Go value of type map[string]json.RawMessage