-
Notifications
You must be signed in to change notification settings - Fork 9
/
index.html
350 lines (315 loc) · 29.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
---
layout: default
title: Complete list of new features in MySQL 5.7
---
<div class="home">
<div class="mysql8">
<a href="https://mysqlserverteam.com/the-complete-list-of-new-features-in-mysql-8-0/">Check out the complete list for MySQL 8.0!</a></a>
</div>
<div id="intro">
<p>There are over 150 new features in MySQL 5.7.</p>
<p>The MySQL manual is very good, but verbose. This is a list of new features in short bullet form. I have tried very hard to make sure each feature is only mentioned once. So <em>InnoDB native partitioning</em> could be mentioned under either InnoDB or partitioning.</p>
<div class="download"><a class="btn" href="http://dev.mysql.com/downloads/mysql/5.7.html">Download MySQL 5.7 GA</a><br /> or install from <a href="http://dev.mysql.com/downloads/repo/yum/">yum</a>, <a href="http://dev.mysql.com/downloads/repo/apt/">apt</a> or <a href="http://dev.mysql.com/downloads/repo/suse/">SUSE</a> repo.</div>
</div>
<a name="replication"></a>
<h3>Replication</h3>
<div class="dual-column">
<ol>
<li class="nd">Multi source replication [<a href="https://dev.mysql.com/doc/refman/5.7/en/replication-multi-source-overview.html">1</a>]</li>
<li class="nd">Online GTID migration path [<a href="http://mysqlhighavailability.com/enabling-gtids-without-downtime-in-mysql-5-7-6/">1</a> <a href="http://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-enable-gtids.html">2</a> <a href="http://dev.mysql.com/worklog/task/?id=7083">3</a>]</li>
<li class="nd">Improved semi-sync performance [<a href="http://my-replication-life.blogspot.ca/2014/03/faster-semisync-replication.html">1</a> <a href="http://dev.mysql.com/worklog/task/?id=6630">2</a>]</li>
<li class="rt">Loss-less semi-sync replication [<a href="http://my-replication-life.blogspot.ca/2013/09/loss-less-semi-synchronous-replication.html">1</a> <a href="http://dev.mysql.com/worklog/task/?id=6355">2</a>]</li>
<li class="nd">Semi-sync can now wait for a configurable number of slaves [<a href="http://my-replication-life.blogspot.ca/2013/12/enforced-semi-synchronous-replication.html">1</a>]</li>
<li class="nd">Intra-schema parallel replication [<a href="https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html#option_mysqld_slave-parallel-type">1</a>]</li>
<li class="nd">Ability to tune group commit via <tt>binlog_group_commit_sync_delay</tt> and <tt>binlog_group_commit_sync_no_delay_count</tt> options. [<a href="http://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay">1</a> <a href="http://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_group_commit_sync_no_delay_count">2</a>]</li>
<li class="rt">Non-blocking <tt>SHOW SLAVE STATUS</tt> [<a href="https://dev.mysql.com/doc/refman/5.7/en/show-slave-status.html">1</a> <a href="http://dev.mysql.com/worklog/task/?id=6402">2</a>]</li>
<li class="rt">Online <tt>CHANGE REPLICATION FILTER</tt> [<a href="https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html">1</a>]</li>
<li class="rt">Online <tt>CHANGE MASTER TO</tt> without stopping SQL thread [<a href="http://dev.mysql.com/worklog/task/?id=6120">1</a>]</li>
<li class="rt">Multi-threaded slave ordered commits (Sequential Consistency) [<a href="http://dev.mysql.com/worklog/task/?id=6813">1</a>]</li>
<li class="rt">Support <tt>SLAVE_TRANSACTION_RETRIES</tt> in multi-threaded slave mode [<a href="http://dev.mysql.com/worklog/task/?id=6964">1</a>]</li>
<li class="nd">A <tt>WAIT_FOR_EXECUTED_GTID_SET</tt> function has been introduced [<a href="http://dev.mysql.com/worklog/task/?id=7796">1</a> <a href="https://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html#function_wait-for-executed-gtid-set">2</a>]</li>
<li class="rt">Optimize GTIDs for Passive Slaves [<a href="https://dev.mysql.com/doc/refman/5.7/en/replication-options-gtids.html#sysvar_gtid_executed_compression_period">1</a> <a href="http://dev.mysql.com/worklog/task/?id=6559">2</a>]</li>
<li class="rt">GTID Replication no longer requires <tt>log-slave-updates</tt> be enabled</li>
<li class="rt">XA Support when the binary log is turned on [<a href="https://dev.mysql.com/doc/refman/5.7/en/xa-restrictions.html">1</a>]</li>
<li class="rt">GTIDs in the OK packet [<a href="http://dev.mysql.com/worklog/task/?id=6128">1</a>]</li>
<li class="rt">Better synchronization between dump and user threads when racing for the binlog [<a href="http://my-replication-life.blogspot.ca/2013/09/dump-thread-enhancement.html">1</a>]</li>
<li class="rt">Improved memory management of Binlog_sender [<a href="http://dev.mysql.com/worklog/task/?id=7299">1</a>]</li>
<li class="rt">Option to suppress "unsafe for binlog" messages in error log [<a href="http://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_log_statements_unsafe_for_binlog">1</a>]</li>
<li class="id">Defaults change: <tt>binlog_format=ROW</tt></li>
<li class="id">Defaults change: <tt>sync_binlog=1</tt></li>
<li class="nd">Defaults change: <tt>binlog_gtid_simple_recovery=1</tt></li>
<li class="id">Defaults change: <tt>binlog_error_action=ABORT_SERVER</tt></li>
<li class="id">Defaults change: <tt>slave_net_timeout=60</tt></li>
</ol>
</div>
<a name="innodb"></a>
<h3>InnoDB</h3>
<div class="dual-column">
<ol>
<li class="id">Online buffer pool resize [<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-online-resize.html">1</a>]</li>
<li class="rt">Improved crash recovery performance [<a href="http://mysqlserverteam.com/innodb-crash-recovery-improvements-in-mysql-5-7/">1</a>]</li>
<li class="rt">Improved read-only transaction scalability [<a href="https://blogs.oracle.com/mysqlinnodb/entry/transaction_life_cycle_improvements_in">1</a> <a href="http://dev.mysql.com/worklog/task/?id=6047">2</a> <a href="http://dev.mysql.com/worklog/task/?id=6906">3</a> <a href="http://dev.mysql.com/worklog/task/?id=6578">4</a>]</li>
<li class="id">Improved read-write transaction scalability [<a href="http://dev.mysql.com/worklog/task/?id=6578">1</a> <a href="http://dev.mysql.com/worklog/task/?id=6363">2</a> <a href="http://dev.mysql.com/worklog/task/?id=6326">3</a> <a href="http://mysqlserverteam.com/mysql-5-7-improves-dml-oriented-workloads/">4</a>]</li>
<li class="rt">Several optimizations for high performance temporary tables [<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-temporary-table-undo-logs.html">1</a> <a href="http://mysqlserverteam.com/mysql-5-7-innodb-intrinsic-tables/">2</a> <a href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_temp_data_file_path">3</a> <a href="https://blogs.oracle.com/mysqlinnodb/entry/https_blogs_oracle_com_mysqlinnodb">4</a> <a href="https://www.flamingspork.com/blog/2013/04/26/a-few-notes-on-innodb-in-mysql-5-7-1/">5</a>]</li>
<li class="id"><tt>ALTER TABLE RENAME INDEX</tt> only requires meta-data change [<a href="http://dev.mysql.com/worklog/task/?id=6555">1</a>]</li>
<li class="rt">Increasing <tt>VARCHAR</tt> size only requires meta-data change [<a href="http://dev.mysql.com/worklog/task/?id=6554">1</a>]</li>
<li class="rt"><tt>ALTER TABLE</tt> performance improved [<a href="http://dev.mysql.com/worklog/task/?id=7277">1</a> <a href="https://dev.mysql.com/doc/refman/5.7/en/sorted-index-builds.html">2</a>]</li>
<li class="zf">Multiple page_cleaner threads [<a href="http://dev.mysql.com/worklog/task/?id=6642">1</a>]</li>
<li class="zf">Optimized buffer pool flushing [<a href="http://dev.mysql.com/worklog/task/?id=7047">1</a>]</li>
<!-- <li class="rt">Multi-threaded page cleaners extended to shutdown and recovery</li> -->
<li class="zf">New <tt>innodb_log_checksum_algorithm</tt> option [<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_log_checksum_algorithm">1</a>]</li>
<li class="nd">Improved NUMA support [<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_numa_interleave">1</a>]</li>
<li class="id">General Tablespace support [<a href="http://mysqlserverteam.com/innodb-general-tablespaces-preview/">1</a>]</li>
<li class="nd">Transparent Page Compression [<a href="http://mysqlserverteam.com/innodb-transparent-page-compression/">1</a>]</li>
<li class="id"><tt>innodb_log_write_ahead_size</tt> introduced to address potential 'read-on-write' with redo logs [<a href="http://mysqlserverteam.com/mysql-5-7-improves-dml-oriented-workloads/">1</a>]</li>
<li class="id">Fulltext indexes now support pluggable parsers [<a href="http://mysqlserverteam.com/innodb-supports-plugin-parser-in-fulltext-index/">1</a>]</li>
<li class="id">Support for ngram and MeCab full-text parser plugins [<a href="http://mysqlserverteam.com/innodb-full-text-n-gram-parser/">1</a> <a href="http://mysqlserverteam.com/innodb-full-text-mecab-parser/">2</a>]</li>
<li class="id">Fulltext search optimizations [<a href="http://dev.mysql.com/worklog/task/?id=7123">1</a>]</li>
<li class="id">Buffer pool dump now supports <tt>innodb_buffer_pool_dump_pct</tt> [<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-preload-buffer-pool.html">1</a>]</li>
<li class="zf">The doublewrite buffer is now disabled on filesystems that supports atomic writes (aka Fusion-io support) [<a href="https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html">1</a>]</li>
<li class="nd">Page fill factor is now configurable [<a href="http://dev.mysql.com/worklog/task/?id=6747">1</a>]</li>
<li class="zf">Support for 32K and 64K pages [<a href="http://mysqlserverteam.com/innodb-supporting-page-sizes-of-32k-and-64k/">1</a>]</li>
<li class="id">Online undo log truncation [<a href="http://mysqlserverteam.com/online-truncate-of-innodb-undo-tablespaces/">1</a>]</li>
<li class="rt"><tt>Update_time</tt> meta data is now updated [<a href="http://dev.mysql.com/worklog/task/?id=6658">1</a>]</li>
<li class="rt"><tt>TRUNCATE TABLE</tt> is now atomic [<a href="http://dev.mysql.com/worklog/task/?id=6501">1</a>]</li>
<li class="id">Memcached API performance improvements [<a href="http://mysqlserverteam.com/mysql-5-7-3-deep-dive-into-1mil-qps-with-innodb-memcached/">1</a>]</li>
<li class="rt">Adaptive hash scalability improvements [<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_adaptive_hash_index_parts">1</a>]</li>
<!-- <li class="rt">Support for High Priority Transactions?</li> -->
<li class="rt">InnoDB now implements <tt>information_schema.files</tt> [<a href="http://dev.mysql.com/worklog/task/?id=7943">1</a>]</li>
<li class="id">Legacy InnoDB monitor tables have been removed or replaced by global configuration settings</li>
<li class="id">InnoDB default row format now configurable [<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_default_row_format">1</a>]</li>
<li class="id">InnoDB now drops tables in a background thread [<a href="http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-10.html#mysqld-5-7-10-feature">1</a>]</li>
<li class="id">InnoDB <tt>tmpdir</tt> is now configurable [<a href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_tmpdir">1</a>]</li>
<li class="id">InnoDB <tt>MERGE_THRESHOLD</tt> is now configurable [<a href="http://dev.mysql.com/doc/refman/5.7/en/index-page-merge-threshold.html">1</a>]</li>
<li class="id">InnoDB <tt>page_cleaner</tt> threads get priority using <tt>setpriority()</tt>[<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_page_cleaners">1</a>]</li>
<li class="id">Defaults change: <tt>innodb_file_format=Barracuda</tt></li>
<li class="id">Defaults change: <tt>innodb_large_prefix=1</tt></li>
<li class="id">Defaults change: <tt>innodb_page_cleaners=4</tt></li>
<li class="id">Defaults change: <tt>innodb_purge_threads=4</tt></li>
<li class="id">Defaults change: <tt>innodb_buffer_pool_dump_at_shutdown=1</tt></li>
<li class="id">Defaults change: <tt>innodb_buffer_pool_load_at_startup=1</tt></li>
<li class="id">Defaults change: <tt>innodb_buffer_pool_dump_pct=25</tt></li>
<li class="id">Defaults change: <tt>innodb_strict_mode=1</tt></li>
<li class="id">Defaults change: <tt>innodb_checksum_algorithm=crc32</tt></li>
<li class="id">Defaults change: <tt>innodb_default_row_format=DYNAMIC</tt></li>
</ol>
</div>
<a name="optimizer"></a>
<h3>Optimizer</h3>
<div class="dual-column">
<ol>
<li class="id">Improved optimizer cost model, leading to more consistently better query plans [<a href="http://mysqlserverteam.com/the-mysql-optimizer-cost-model-project/">1</a> <a href="http://mysqlserverteam.com/optimizer-cost-model-improvements-in-mysql-5-7-5-dmr/">2</a> <a href="http://www.slideshare.net/olavsa/mysql-optimizer-cost-model">3</a> <a href="http://dev.mysql.com/worklog/task/?id=7340">4</a>]</li>
<li class="id">Optimizer cost constants are now configurable on a global or per engine basis [<a href="https://dev.mysql.com/doc/refman/5.7/en/cost-model.html">1</a> <a href="http://mysqlserverteam.com/optimizer-cost-model-improvements-in-mysql-5-7-5-dmr/">2</a>]</li>
<li class="id">Query parser has been refactored and improved [<a href="https://dev.mysql.com/worklog/task/?id=6707">1</a>]</li>
<li class="nd"><tt>EXPLAIN FOR CONNECTION</tt> [<a href="https://dev.mysql.com/doc/refman/5.7/en/explain-for-connection.html">1</a>]</li>
<li class="zf"><tt>UNION ALL</tt> does not use a temporary table [<a href="https://dev.mysql.com/worklog/task/?id=1763">1</a> <a href="http://www.tocker.ca/2013/12/10/testing-the-union-all-optimization-in-mysql-5.7-dmr3.html
">2</a> <a href="http://mysqlserverteam.com/state-of-the-union/">3</a> <a href="https://dev.mysql.com/doc/refman/5.7/en/union.html">4</a>]</li>
<li class="id">Filesort is now optimized to pack values [<a href="http://mysqlserverteam.com/filesort-optimization-in-5-7-3-pack-values-in-the-sort-buffer/">1</a>]</li>
<li class="nd">Subqueries in <tt>FROM</tt> clause can now be handled same as a view (<tt>derived_merge</tt>) [<a href="https://dev.mysql.com/doc/refman/5.7/en/subquery-optimization.html#derived-table-optimization">1</a>]</li>
<li class="rt">Queries using row value constructors are now optimized [<a href="http://dev.mysql.com/doc/refman/5.7/en/range-optimization.html#row-constructor-range-optimization">1</a> <a href="http://dev.mysql.com/worklog/task/?id=7019">2</a>]</li>
<li class="rt">Optimizer now supports a new condition filtering optimization [<a href="http://mysqlserverteam.com/a-new-dimension-to-mysql-query-optimizations-part-1/">1</a> <a href="http://mysqlserverteam.com/a-new-dimension-to-mysql-query-optimizations-part-2/">2</a>]</li>
<li class="id"><tt>EXPLAIN FORMAT=JSON</tt> now shows cost information [<a href="http://dev.mysql.com/worklog/task/?id=6510">1</a>]</li>
<li class="nd">Support for <tt>STORED</tt> and <tt>VIRTUAL</tt> generated columns (aka functional indexes) [<a href="http://mysqlserverteam.com/virtual-columns-and-effective-functional-indexes-in-innodb/">1</a>]</li>
<li class="id">Prepared statements refactored internally and performance improved [<a href="http://mysqlserverteam.com/re-factoring-some-internals-of-prepared-statements-in-5-7/">1</a> <a href="http://dev.mysql.com/worklog/task/?id=7082">2</a>]</li>
<li class="id">New query hints using comment-like <tt>/*+ */</tt> syntax [<a href="http://mysqlserverteam.com/new-optimizer-hints-in-mysql/">1</a>]</li>
<li class="id">Server-side query rewrite framework [<a href="http://mysqlserverteam.com/write-yourself-a-query-rewrite-plugin-part-1/">1</a>]</li>
<li class="id"><tt>ONLY_FULL_GROUP_BY</tt> now more standards compliant [<a href="http://mysqlserverteam.com/mysql-5-7-only_full_group_by-improved-recognizing-functional-dependencies-enabled-by-default/">1</a>]</li>
<li class="id">Support for gb18030 character set [<a href="https://dev.mysql.com/worklog/task/?id=4024">1</a>]</li>
<li class="id">Improvements to Dynamic Range access [<a href="http://mysqlserverteam.com/dynamic-range-access-and-recent-changes/">1</a>]</li>
<li class="id">Memory used by the range optimizer is now configurable [<a href="http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_range_optimizer_max_mem_size">1</a>]</li>
<li class="id">Defaults change: <tt>internal_tmp_disk_storage_engine=INNODB</tt> [<a href="https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_internal_tmp_disk_storage_engine">1</a>]</li>
<li class="id">Defaults change: <tt>eq_range_index_dive_limit=200</tt></li>
<li class="id">Defaults change: <tt>sql_mode=ONLY_FULL_GROUP_BY,
STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,
NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION</tt>
</li>
<lt class="rt">Defaults change: <tt>optimizer_switch=condition_fanout_filter=on,
derived_merge=on</tt></li>
<li class="id">Defaults change: <tt>EXTENDED</tt> and <tt>PARTITIONS</tt> keywords for <tt>EXPLAIN</tt> enabled by default</li>
</ol>
</div>
<a name="security"></a>
<h3>Security</h3>
<div class="dual-column">
<ol>
<li class="nd">Username size increased to 32 characters [<a href="http://dev.mysql.com/worklog/task/?id=2284">1</a>]</li>
<li class="zf">Support for <tt>IF [NOT] EXISTS</tt> clause in <tt>CREATE/DROP USER</tt> [<a href="http://dev.mysql.com/worklog/task/?id=8540">1</a>]</li>
<li class="id">Server option to require secure transport [<a href="http://dev.mysql.com/worklog/task/?id=7709">1</a>]</li>
<li class="id">Support for multiple AES Encryption modes [<a href="http://dev.mysql.com/worklog/task/?id=6781">1</a> <a href="http://mysqlserverteam.com/understand-and-satisfy-your-aes-encryption-needs-with-5-6-17/">2</a>]</li>
<li class="nd">Support for TLSv1.2 (with OpenSSL) and TLSv1.1 (with YaSSL) [<a href="http://dev.mysql.com/doc/refman/5.7/en/secure-connection-protocols-ciphers.html">1</a> <a href="http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-10.html#mysqld-5-7-10-security">2</a>]</li>
<li class="id">Support to <tt>LOCK/UNLOCK</tt> user accounts [<a href="http://mysqlblog.fivefarmers.com/2015/04/21/locking-accounts-in-mysql-5-7/">1</a> <a href="https://dev.mysql.com/doc/refman/5.7/en/account-locking.html">2</a>]</li>
<li class="id">Support for password expiration policy [<a href="https://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html">1</a> <a href="http://mysqlblog.fivefarmers.com/2014/03/31/password-expiration-policy-in-mysql-server-5-7/">2</a>]</li>
<li class="nd">Password strength enforcement</li>
<li class="id">test database no longer created on installation</li>
<li class="id">Anonymous users no longer created on installation</li>
<li class="id">Random password generated by default on installation</li>
<li class="id">New <tt>ALTER USER</tt> command</li>
<li class="id"><tt>SET password=''</tt> now accepts a password instead of hash</li>
<li class="id">Server now generates SSL keys by default</li>
<li class="id">Insecure <tt>old_password</tt> hash removed [<a href="https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_old-password">1</a>]</li>
<li class="rt">Ability to create utility users for stored programs that can not login [<a href="https://dev.mysql.com/doc/refman/5.7/en/mysql-no-login-plugin.html">1</a>]</li>
<li class="id"><tt>mysql.user.password</tt> field renamed as <tt>authentication_string</tt> to better describe its current usage.</li>
<li class="nd">Support for tablespace encryption [<a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html">1</a>]</li>
</ol>
</div>
<!-- and Information Schema -->
<a name="performance_schema"></a>
<h3>Performance Schema</h3>
<div class="dual-column">
<ol>
<li class="rt">Scalable memory allocation [<a href="http://mysqlserverteam.com/new-in-mysql-5-7-performance-schema-scalable-memory-allocation/">1</a>]</li>
<li class="id">Overhead has been reduced in client connect/disconnect phases</li>
<li class="rt">Memory footprint has been reduced</li>
<li class="rt">pfs_lock implementation has been improved</li>
<li class="rt">Table IO statistics are now batched for improved performance</li>
<li class="id">Memory usage instrumentation</li>
<li class="rt">Stored programs instrumentation</li>
<li class="rt">Replication slave instrumentation</li>
<li class="rt">Metadata Locking (MDL) Instrumentation</li>
<li class="rt">Transaction instrumentation</li>
<li class="rt">Prepared Statement instrumentation</li>
<li class="rt">Stage Progress instrumentation</li>
<li class="rt">SX-lock and rw_lock instrumentation</li>
<li class="rt">Thread status and variables</li>
<li class="id"><tt>Defaults change: performance-schema-consumer-events_statements_history=ON</tt></li>
</ol>
</div>
<a name="gis"></a>
<h3>GIS</h3>
<div class="dual-column">
<ol>
<li class="rt">InnoDB supports indexing of spatial datatypes [<a href="https://dev.mysql.com/doc/refman/5.7/en/creating-spatial-indexes.html">1</a>]</li>
<li class="rt">Consistent naming scheme for GIS functions [<a href="http://mysqlserverteam.com/spring-cleaning-in-the-gis-namespace/">1</a>]</li>
<li class="rt">GIS has been refactored internally and is now based on Boost Geometry [<a href="http://mysqlserverteam.com/why-boost-geometry-in-mysql/">1</a>]</li>
<!-- <li class="rt">Expanded spatial relation check functions [<a href="http://dev.mysql.com/worklog/task/?id=7220">1</a>]</li>
<li class="rt">Expanded geometry set operations [<a href="http://dev.mysql.com/worklog/task/?id=7221">1</a>]</li>
<li class="rt">Expanded spatial analysis functions [<a href="http://dev.mysql.com/worklog/task/?id=7236">1</a>]</li>
<li class="rt">WKB Geometry Container [<a href="http://dev.mysql.com/worklog/task/?id=7280">1</a>]</li> -->
<li class="rt">Geohash functions [<a href="https://dev.mysql.com/doc/refman/5.7/en/spatial-geohash-functions.html">1</a> <a href="http://mysqlserverteam.com/geohash-functions/">2</a>]</li>
<li class="rt">GeoJSON functions [<a href="https://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functions.html">1</a> <a href="http://mysqlserverteam.com/geojson-functions/">2</a>]</li>
<li class="rt">Functions: ST_Distance_Sphere, ST_MakeEnvelope, ST_IsValid, ST_Validate, ST_Simplify, ST_Buffer and ST_IsSimple [<a href="http://dev.mysql.com/worklog/task/?id=8034">1</a> <a href="http://dev.mysql.com/worklog/task/?id=7929">2</a>]</li>
</ol>
</div>
<a name="triggers"></a>
<h3>Triggers</h3>
<div class="dual-column">
<ol>
<li class="rt">Multiple triggers per event per table [<a href="https://dev.mysql.com/worklog/task/?id=3253">1</a>]</li>
<li class="rt"><tt>BEFORE</tt> Triggers are not processed for <tt>NOT NULL</tt> columns [<a href="https://dev.mysql.com/worklog/task/?id=6030">1</a>]</li>
</ol>
</div>
<a name="partitioning"></a>
<h3>Partitioning</h3>
<div class="dual-column">
<ol>
<li class="rt">Index condition pushdown optimization now supported</li>
<li class="rt"><tt>HANDLER</tt> command is now supported</li>
<li class="rt"><tt>WITHOUT VALIDATION</tt> option now supported for <tt>ALTER TABLE ... EXCHANGE PARTITION</tt></li>
<li class="rt">Support for Transportable Tablespaces</li>
<li class="id">Partitioning is now storage-engine native for InnoDB</li>
</ol>
</div>
<a name="sys"></a>
<h3>SYS (new)</h3>
<div class="dual-column">
<ol>
<li class="id"><tt>SYS</tt> schema bundled by default [<a href="https://dev.mysql.com/worklog/task/?id=8159">1</a> <a href="https://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html#option_mysql_upgrade_skip-sys-schema">2</a>]</li>
<li class="id">100 new views, 21 new stored functions and 26 new stored procedures to help understand and interact with Performance Schema and Information Schema [<a href="http://www.github.com/markleith/mysql-sys">1</a>]</li>
</ol>
</div>
<a name="json"></a>
<h3>JSON (new)</h3>
<div class="dual-column">
<ol>
<li class="id">Native JSON Data Type [<a href="https://dev.mysql.com/doc/refman/5.7/en/json.html">1</a>]</li>
<li class="id">JSON Comparator</li>
<li class="id">Short-hand JSON_EXTRACT operator (field->"json_path") [<a href="https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-column-path">1</a>]</li>
<li class="id">New Document Store (5.7.12)</li>
<li class="id">Functions: JSON_ARRAY, JSON_MERGE, JSON_OBJECT for creating JSON values [<a href="https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html">1</a>]</li>
<li class="id">Functions: JSON_CONTAINS, JSON_CONTAINS_PATH, JSON_EXTRACT, JSON_KEYS, JSON_SEARCH for searching JSON values [<a href="https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html">1</a>]</li>
<li class="id">Functions: JSON_ARRAY_APPEND, JSON_ARRAY_INSERT, JSON_INSERT, JSON_QUOTE, JSON_REMOVE, JSON_REPLACE, JSON_UNSET, JSON_UNQUOTE to modify JSON values [<a href="https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html">1</a>]</li>
<li class="id">Functions: JSON_DEPTH, JSON_LENGTH, JSON_TYPE, JSON_VALID to return JSON value attributes [<a href="https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html">1</a>]</li>
</li>
</ol>
</div>
<a name="client-programs"></a>
<h3>Client Programs</h3>
<div class="dual-column">
<ol>
<li class="id">New <tt>mysqlpump</tt> utility [<a href="https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html">1</a>]</li>
<li class="rt">The <tt>mysql</tt> client now supports <tt>Ctrl+C</tt> to clear statement buffer</li>
<li class="rt"><tt>rewrite-db</tt> option added to mysqlbinlog [<a href="http://dev.mysql.com/worklog/task/?id=6404">1</a> <a href="https://dev.mysql.com/doc/refman/5.7/en/mysqlbinlog.html#option_mysqlbinlog_rewrite-db">2</a>]</li>
<li class="rt">New <tt>mysql_ssl_rsa_setup</tt> utility to help set up SSL [<a href="https://dev.mysql.com/doc/refman/5.7/en/mysql-ssl-rsa-setup.html">1</a>]</li>
<li class="rt">SSL support added to mysqlbinlog</li>
<li class="rt">Idempotent mode added to mysqlbinlog</li>
<li class="rt">Client <tt>--ssl</tt> changed to now force SSL</li>
<li class="rt">Enhancements to the innochecksum utility</li>
<li class="id">Removal of several outdated/unsafe command line utilities [<a href="http://www.tocker.ca/2014/03/07/plan-to-remove-unused-command-line-programs.html">1</a>]</li>
<li class="id">Many Perl command line clients converted to C++</li>
<li class="rt">Client Side Protocol Tracing</li>
<li class="rt">Client API method to reset connection</li>
<li class="id">New MySQL Shell (<tt>mysqlsh</tt>) (separate download)</li>
</ol>
</div>
<a name="libmysqlclient"></a>
<h3>libmysqlclient</h3>
<div class="dual-column">
<ol>
<li>Restricted export functions to documented MySQL C API</li>
<li>Added pkg-config support</li>
<li>Removed <tt>_r</tt> symlinks</li>
<li>Changed so version to 20 (from 18)</li>
</ol>
</div>
<a name="building"></a>
<h3>Building</h3>
<div class="dual-column">
<ol>
<li class="rt">Compiler switched to GCC on Solaris</li>
<li class="rt">MySQL now compiles with Bison 3 (* change also backported)</li>
<li class="rt">CMake now used to compile on all platforms</li>
<li class="rt">Unneeded CMake checks have been removed (and unused macros removed from source files)</li>
<li class="rt">Build support for gcc, clang and MS Studio</li>
</div>
<a name="misc"></a>
<h3>Misc</h3>
<div class="dual-column">
<ol>
<li class="rt">Server new connection throughput improved considerably [<a href="http://dev.mysql.com/worklog/task/?id=6606">1</a>]</li>
<li class="id"><tt>mysql_install_db</tt> replaced by <tt>mysqld --initialize</tt> [<a href="https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html">1</a>]</li>
<li class="rt">Native support for syslog [<a href="http://mysqlserverteam.com/logging-with-mysql-error-logging-to-syslog-eventlog/">1</a> <a href="https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_log_syslog">2</a>]</li>
<li class="rt">Native support for systemd</li>
<li class="nd"><tt>disabled_storage_engines</tt> option allows a block list of engines</li>
<li class="id"><tt>SET GLOBAL offline_mode=1</tt> [<a href="http://dev.mysql.com/worklog/task/?id=3836">1</a> <a href="http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_offline_mode">2</a>]</li>
<li class="id"><tt>super_read_only</tt> option [<a href="http://dev.mysql.com/worklog/task/?id=6799">1</a>]</li>
<li class="rt">Detect transaction boundaries</li>
<li class="rt">Server version token and check [<a href="https://dev.mysql.com/doc/refman/5.7/en/version-tokens.html">1</a></li>
<li class="nd"><tt>SELECT GET_LOCK()</tt> can now acquire multiple locks [<a href="https://dev.mysql.com/worklog/task/?id=1159">1</a> <a href="https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_get-lock">2</a>]</li>
<li class="nd">Configurable maximum statement execution time on a global and per query basis [<a href="http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_execution_time">1</a> <a href="http://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer-hints-execution-time">2</a>]</li>
<li class="rt">Better handling of connection id rollover</li>
<li class="rt">DTrace support [<a href="http://dev.mysql.com/worklog/task/?id=7894">1</a>]</li>
<li class="id">More consistent <tt>IGNORE</tt> clause and <tt>STRICT</tt> mode</li>
<li class="nd">A number of tables in the mysql schema have moved from MyISAM to InnoDB</li>
<li class="nd">Server error log format improved to be consistent</li>
<li class="rt">Extract query digest moved from performance_schema into the server directly</li>
<li class="rt">Improved scalability of meta data locking</li> <!-- lock free hash, dml fast path-->
<li class="id">Increased control over error log verbosity</li>
<li class="rt">Stacked Diagnostic Areas</li>
<li class="rt">The server now supports a "SHUTDOWN" command</li>
<li class="nd">Removed support for custom atomics implementation</li>
<li class="id">Removed "unique option prefix support" from server and utilities, which allowed options to be configured using multiple names.</li>
<li class="id">Removed unsafe ALTER IGNORE TABLE functionality. Syntax remains for compatibility</li>
<li class="id">Removed unsafe INSERT DELAYED functionality. Syntax remains for compatibility</li>
<li class="id">Removed of outdated sql-bench scripts in distributions</li>
<li class="id">Removal of ambiguous YEAR(2) datatype</li>
<li class="rt">Defaults change: <tt>log_warnings=2</tt></li>
<li class="id">Defaults change: <tt>table_open_cache_instances=16</tt></li>
</li>
</ol>
</div>
</div> <!-- // dual-column -->
</div>