Skip to content

tidb-server v3.0.0

Compare
Choose a tag to compare
@winkyao winkyao released this 12 May 16:03

New Features

  • Support Window Functions; compatible with all window functions in MySQL 8.0, including NTILE, LEAD, LAG, PERCENT_RANK, NTH_VALUE, CUME_DIST, FIRST_VALUE , LAST_VALUE, RANK, DENSE_RANK, and ROW_NUMBER
  • Support Views (Experimental)
  • Improve Table Partition
    • Support Range Partition
    • Support Hash Partition
  • Add the plug-in framework, supporting plugins such as IP Whitelist (Enterprise feature) and Audit Log (Enterprise feature).
  • Support the SQL Plan Management function to create SQL execution plan binding to ensure query stability (Experimental)

SQL Optimizer

  • Optimize the NOT EXISTS subquery and convert it to Anti Semi Join to improve performance
  • Optimize the constant propagation on the Outer Join, and add the optimization rule of Outer Join elimination to reduce non-effective computations and improve performance
  • Optimize the IN subquery to execute Inner Join after aggregation to improve performance
  • Optimize Index Join to adapt to more scenarios
  • Improve the Partition Pruning optimization rule of Range Partition
  • Optimize the query logic for _tidb_rowidto avoid full table scan and improve performance
  • Match more prefix columns of the indexes when extracting access conditions of composite indexes if there are relevant columns in the filter to improve performance
  • Improve the accuracy of cost estimates by using order correlation between columns
  • Optimize Join Reorder based on the Greedy algorithm and the dynamic planning algorithm to improve accuracy for index selection using Join
  • Support Skyline Pruning, with some rules to prevent the execution plan from relying too heavily on statistics to improve query stability
  • Improve the accuracy of row count estimation for single-column indexes with NULL values
  • Support FAST ANALYZE that randomly samples in each Region to avoid full table scan and improve performance with statistics collection
  • Support the incremental Analyze operation on monotonically increasing index columns to improve performance with statistics collection
  • Support using subqueries in the DO statement
  • Support using Index Join in transactions
  • Optimize prepare/execute to support DDL statements with no parameters
  • Modify the system behaviour to auto load statistics when the stats-lease variable value is 0
  • Support exporting historical statistics
  • Support the dump/load correlation of histograms

SQL Execution Engine

  • Optimize log output: EXECUTE outputs user variables and COMMIT outputs slow query logs to facilitate troubleshooting
  • Support the EXPLAIN ANALYZE function to improve SQL tuning usability
  • Support the admin show next_row_id command to get the ID of the next row
  • Add six built-in functions: JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK ,COALESCE, and NAME_CONST
  • Optimize control logics on the chunk size to dynamically adjust based on the query context, to reduce the SQL execution time and resource consumption
  • Support tracking and controlling memory usage in three operators - TableReader, IndexReader and IndexLookupReader
  • Optimize the Merge Join operator to support an empty ON condition
  • Optimize write performance for single tables that contains too many columns
  • Improve the performance of admin show ddl jobs by supporting scanning data in reverse order
  • Add the split table region statement to manually split the table Region to alleviate the hotspot issue
  • Add the split index region statement to manually split the index Region to alleviate the hotspot issue
  • Add a blacklist to prohibit pushing down expressions to Coprocessor
  • Optimize the Expensive Query log to print the SQL query in the log when it exceeds the configured limit of execution time or memory

DDL

  • Support migrating from character set utf8 to utf8mb4
  • Change the default character set fromutf8 to utf8mb4
  • Add the alter schema statement to modify the character set and the collation of the database
  • Support ALTER algorithm INPLACE/INSTANT
  • Support SHOW CREATE VIEW
  • Support SHOW CREATE USER
  • Support fast recovery of mistakenly deleted tables
  • Support adjusting the number of concurrencies of ADD INDEX dynamically
  • Add the pre_split_regions option that pre-allocates Regions when creating the table using the CREATE TABLE statement, to relieve write hot Regions caused by lots of writes after the table creation
  • Support splitting Regions by the index and range of the table specified using SQL statements to relieve hotspot issues
  • Add the ddl_error_count_limit global variable to limit the number of DDL task retries
  • Add a feature to use SHARD_ROW_ID_BITS to scatter row IDs when the column contains an AUTO_INCREMENT attribute to relieve the hotspot issue
  • Optimize the lifetime of invalid DDL metadata to speed up recovering the normal execution of DDL operations after upgrading the TiDB cluster

Transactions

  • Support the pessimistic transaction model (Experimental)
  • Optimize transaction processing logics to adapt to more scenarios:
    • Change the default value tidb_disable_txn_auto_retry to on, which means non-auto committed transactions will not be retried
    • Add the tidb_batch_commit system variable to split a transaction into multiple ones to be executed concurrently
    • Add the tidb_low_resolution_tso system variable to control the number of TSOs to obtain in batches and reduce the number of times that transactions request for TSOs, to improve performance in scenarios with relatively low requirement of consistency
    • Add the tidb_skip_isolation_level_check variable to control whether to report errors when the isolation level is set to SERIALIZABLE
    • Modify the tidb_disable_txn_auto_retry system variable to make it work on all retryable errors

Permission Management

  • Perform permission check on the ANALYZE, USE, SET GLOBAL, and SHOW PROCESSLIST statements
  • Support Role Based Access Control (RBAC) (Experimental)

Server

  • Optimize slow query logs
    • Restructure the log format
    • Optimize the log content
    • Optimize the log query method to support using the INFORMATION_SCHEMA.SLOW_QUERY and ADMIN SHOW SLOW statements of the memory table to query slow query logs
  • Develop a unified log format specification with restructured log system to facilitate collection and analysis by tools
  • Support using SQL statements to manage Binlog services, including querying status, enabling Binlog, maintaining and sending Binlog strategies.
  • Support using unix_socket to connect to the database
  • Support Trace for SQL statements
  • Support getting information for a TiDB instance via the /debug/zip HTTP interface to facilitate troubleshooting.
  • Optimize monitoring items to facilitate troubleshooting:
    • Add the high_error_rate_feedback_total monitoring item to monitor the difference between the actual data volume and the estimated data volume based on statistics
    • Add a QPS monitoring item in the database dimension
  • Optimize the system initialization process to only allow the DDL owner to perform the initialization. This reduces the startup time for initialization or upgrading.
  • Optimize the execution logic of kill query to improve performance and ensure resource is release properly
  • Add a startup option config-check to check the validity of the configuration file
  • Add the tidb_back_off_weight system variable to control the backoff time of internal error retries
  • Add the wait_timeoutand interactive_timeout system variables to control the maximum idle connections allowed
  • Add the connection pool for TiKV to shorten the connection establishing time

Compatibility

  • Support the ALLOW_INVALID_DATES SQL mode
  • Support the MySQL 320 Handshake protocol
  • Support manifesting unsigned BIGINT columns as auto-increment columns
  • Support the SHOW CREATE DATABASE IF NOT EXISTS syntax
  • Optimize the fault tolerance of load data for CSV files
  • Abandon the predicate pushdown operation when the filtering condition contains a user variable to improve the compatibility with MySQL’s behavior of using user variables to simulate Window Functions