MySQL CMake allows setting -DWITH_UNIT_TESTS=OFF, which presumably should get rid
of most things in the above. Of course, not compiling the unit tests has the
inconvenience of not being able to run them after a build, and breaking the build for
Mark. But let's experiment.
Rerunning the above with -DWITH_UNIT_TESTS=OFF cut the wall compilation time almost
in half, which is unfortunately invalidated by Chrome slowly making its way to a
crash in the first third of the full compilation, and the report now looks very
different:
**** Time summary:
Compilation (4955 times):
Parsing (frontend): 2912.1 s
Codegen & opts (backend): 1280.0 s
**** Files that took longest to parse (compiler frontend):
7134 ms: ./sql/CMakeFiles/sql_gis.dir/gis/union_functor.cc.o
6966 ms: ./router/src/router/src/CMakeFiles/router_frontend_lib.dir/router_app.cc.o
6820 ms: ./sql/CMakeFiles/sql_gis.dir/gis/symdifference_functor.cc.o
6527 ms: ./sql/CMakeFiles/sql_gis.dir/gis/difference_functor.cc.o
6454 ms: ./sql/CMakeFiles/sql_gis.dir/gis/intersection_functor.cc.o
5857 ms: ./sql/CMakeFiles/sql_gis.dir/gis/srs/wkt_parser.cc.o
5748 ms: ./sql/CMakeFiles/sql_gis.dir/gis/symdifference_functor.cc.o
5577 ms: ./sql/CMakeFiles/sql_main.dir/auth/sql_authorization.cc.o
5543 ms: ./sql/CMakeFiles/sql_gis.dir/gis/within.cc.o
5132 ms: ./sql/CMakeFiles/sql_gis.dir/item_geofunc.cc.o
**** Files that took longest to codegen (compiler backend):
32200 ms: ./sql/CMakeFiles/sql_gis.dir/gis/intersection_functor.cc.o
30934 ms: ./sql/CMakeFiles/sql_gis.dir/gis/difference_functor.cc.o
26649 ms: ./sql/CMakeFiles/sql_gis.dir/gis/symdifference_functor.cc.o
26390 ms: ./sql/CMakeFiles/sql_gis.dir/gis/touches.cc.o
23451 ms: ./sql/CMakeFiles/sql_gis.dir/gis/crosses.cc.o
21500 ms: ./sql/CMakeFiles/sql_gis.dir/gis/within.cc.o
19349 ms: ./sql/CMakeFiles/sql_gis.dir/gis/distance_functor.cc.o
19187 ms: ./sql/CMakeFiles/sql_gis.dir/gis/union_functor.cc.o
18280 ms: ./sql/CMakeFiles/sql_gis.dir/gis/overlaps.cc.o
16962 ms: ./sql/CMakeFiles/sql_gis.dir/gis/buffer.cc.o
**** Templates that took longest to instantiate:
20773 ms: std::unique_ptr<std::unordered_multimap<const MDL_key *, MDL_ticket_... (914 times, avg 22 ms)
20707 ms: std::unique_ptr<std::unordered_multimap<const MDL_key *, MDL_ticket_... (915 times, avg 22 ms)
20550 ms: std::default_delete<std::unordered_multimap<const MDL_key *, MDL_tic... (915 times, avg 22 ms)
14289 ms: std::unordered_multimap<const MDL_key *, MDL_ticket_store::MDL_ticke... (915 times, avg 15 ms)
12743 ms: std::copy_n<const wchar_t *, unsigned long, wchar_t *> (2547 times, avg 5 ms)
12637 ms: std::copy_n<const char *, unsigned long, char *> (2542 times, avg 4 ms)
12551 ms: std::copy<const wchar_t *, wchar_t *> (2547 times, avg 4 ms)
12346 ms: std::copy_n<const char16_t *, unsigned long, char16_t *> (2546 times, avg 4 ms)
12307 ms: std::copy<const char *, char *> (2547 times, avg 4 ms)
12145 ms: std::copy<const char16_t *, char16_t *> (2547 times, avg 4 ms)
11944 ms: std::__copy<const wchar_t *, const wchar_t *, wchar_t *, 0> (2547 times, avg 4 ms)
11894 ms: std::copy_n<const char32_t *, unsigned long, char32_t *> (2547 times, avg 4 ms)
11674 ms: std::copy<const char32_t *, char32_t *> (2547 times, avg 4 ms)
11667 ms: std::__copy<const char *, const char *, char *, 0> (2547 times, avg 4 ms)
11526 ms: std::__copy<const char16_t *, const char16_t *, char16_t *, 0> (2547 times, avg 4 ms)
10919 ms: std::__copy<const char32_t *, const char32_t *, char32_t *, 0> (2547 times, avg 4 ms)
10219 ms: collation_unordered_map<std::string, std::unique_ptr<user_var_entry,... (600 times, avg 17 ms)
9859 ms: std::basic_string<char>::basic_string (2726 times, avg 3 ms)
9834 ms: std::vector<unsigned char *>::push_back (784 times, avg 12 ms)
9728 ms: malloc_unordered_map<char **, std::unique_ptr<char, My_free_deleter>... (601 times, avg 16 ms)
9355 ms: std::vector<unsigned char *>::__push_back_slow_path<unsigned char *c... (784 times, avg 11 ms)
9318 ms: std::unordered_map<std::string, unsigned long> (846 times, avg 11 ms)
8973 ms: std::unordered_map<std::string, std::unique_ptr<user_var_entry, void... (600 times, avg 14 ms)
8932 ms: std::basic_string<wchar_t>::basic_string (2611 times, avg 3 ms)
8793 ms: std::__scalar_hash<std::_PairT, 2>::operator() (2580 times, avg 3 ms)
8642 ms: net::basic_waitable_timer<std::chrono::steady_clock>::cancel (81 times, avg 106 ms)
8639 ms: net::io_context::cancel<net::basic_waitable_timer<std::chrono::stead... (81 times, avg 106 ms)
8568 ms: collation_unordered_map<std::string, std::unique_ptr<Table_ref, My_f... (600 times, avg 14 ms)
8505 ms: std::basic_string<char16_t>::basic_string (2609 times, avg 3 ms)
8493 ms: std::basic_string<char32_t>::basic_string (2618 times, avg 3 ms)
**** Template sets that took longest to instantiate:
91311 ms: std::unique_ptr<$> (44993 times, avg 2 ms)
81831 ms: std::__hash_table<$> (9702 times, avg 8 ms)
74391 ms: std::unordered_map<$> (7352 times, avg 10 ms)
64459 ms: std::allocator_traits<$> (22807 times, avg 2 ms)
62238 ms: std::map<$> (11577 times, avg 5 ms)
59739 ms: std::function<$>::function<$> (1549 times, avg 38 ms)
59342 ms: std::__function::__value_func<$>::__value_func<$> (1549 times, avg 38 ms)
54833 ms: std::copy<$> (11586 times, avg 4 ms)
54215 ms: std::__tree<$> (15582 times, avg 3 ms)
51692 ms: std::__copy<$> (11585 times, avg 4 ms)
50051 ms: std::copy_n<$> (10264 times, avg 4 ms)
48536 ms: std::decay<$> (11965 times, avg 4 ms)
48319 ms: std::__function::__func<$>::__func (1549 times, avg 31 ms)
48146 ms: std::vector<$>::push_back (3923 times, avg 12 ms)
45687 ms: std::unordered_map<$>::unordered_map (3885 times, avg 11 ms)
45017 ms: std::vector<$>::__push_back_slow_path<$> (3822 times, avg 11 ms)
44368 ms: std::vector<$> (21423 times, avg 2 ms)
41048 ms: std::vector<$>::__swap_out_circular_buffer (5253 times, avg 7 ms)
40485 ms: std::__function::__alloc_func<$>::__alloc_func (4647 times, avg 8 ms)
38700 ms: std::basic_string<$>::basic_string (11728 times, avg 3 ms)
36048 ms: std::unique_ptr<$>::reset (4008 times, avg 8 ms)
35840 ms: std::pair<$> (16452 times, avg 2 ms)
35779 ms: std::__hash_table<$>::__hash_table (4198 times, avg 8 ms)
35340 ms: std::unique_ptr<$>::~unique_ptr (3870 times, avg 9 ms)
34007 ms: std::__compressed_pair<$> (10756 times, avg 3 ms)
33242 ms: std::__uninitialized_allocator_move_if_noexcept<$> (5252 times, avg 6 ms)
33225 ms: std::basic_string<$> (11487 times, avg 2 ms)
32465 ms: std::forward_as_tuple<$> (6724 times, avg 4 ms)
31334 ms: malloc_unordered_map<$> (3118 times, avg 10 ms)
30751 ms: std::__decay<$> (7475 times, avg 4 ms)
**** Functions that took longest to compile:
2514 ms: MYSQLparse(THD*, Parse_tree_root**) (/Users/laurynas/vilniusdb/mysql-8.0.33/_build-release-time-report-no-unit-tests/sql/sql_yacc.cc)
819 ms: _GLOBAL__sub_I_sys_vars.cc (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/sys_vars.cc)
592 ms: duk__js_execute_bytecode_inner (/Users/laurynas/vilniusdb/mysql-8.0.33/extra/duktape/duktape-2.7.0/src/duktape.c)
582 ms: SetObjectMembers(std::__1::unique_ptr<Json_object, std::__1::default... (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/join_optimizer/explain_access_path.cc)
510 ms: MySQLRouter::prepare_command_options() (/Users/laurynas/vilniusdb/mysql-8.0.33/router/src/router/src/router_app.cc)
456 ms: my_strnncoll_uca_900(CHARSET_INFO const*, unsigned char const*, unsi... (/Users/laurynas/vilniusdb/mysql-8.0.33/strings/ctype-uca.cc)
429 ms: spec_adder(rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjs... (/Users/laurynas/vilniusdb/mysql-8.0.33/router/src/rest_routing/src/rest_routing_plugin.cc)
384 ms: init_handlers(mysql_harness::PluginFuncEnv*, mysql_harness::LoaderCo... (/Users/laurynas/vilniusdb/mysql-8.0.33/router/src/harness/src/logging/logger_plugin.cc)
351 ms: rapidjson::internal::Schema<rapidjson::GenericSchemaDocument<rapidjs... (/Users/laurynas/vilniusdb/mysql-8.0.33/router/src/harness/src/dynamic_state.cc)
304 ms: my_strnxfrm_uca_900(CHARSET_INFO const*, unsigned char*, unsigned lo... (/Users/laurynas/vilniusdb/mysql-8.0.33/strings/ctype-uca.cc)
276 ms: spec_adder(rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjs... (/Users/laurynas/vilniusdb/mysql-8.0.33/router/src/rest_metadata_cache/src/rest_metadata_cache_plugin.cc)
271 ms: my_hash_sort_uca_900(CHARSET_INFO const*, unsigned char const*, unsi... (/Users/laurynas/vilniusdb/mysql-8.0.33/strings/ctype-uca.cc)
250 ms: test_sql(void*) (/Users/laurynas/vilniusdb/mysql-8.0.33/plugin/test_service_sql_api/test_sql_lock.cc)
247 ms: CmdArgHandler::process(std::__1::vector<std::__1::basic_string<char,... (/Users/laurynas/vilniusdb/mysql-8.0.33/router/src/harness/src/arg_handler.cc)
242 ms: open_table_def(THD*, TABLE_SHARE*, dd::Table const&) (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/dd_table_share.cc)
237 ms: trx_undo_report_row_operation(unsigned long, unsigned long, que_thr_... (/Users/laurynas/vilniusdb/mysql-8.0.33/storage/innobase/trx/trx0rec.cc)
230 ms: test_wl4435_3() (/Users/laurynas/vilniusdb/mysql-8.0.33/testclients/mysql_client_test.cc)
212 ms: void std::__1::__introsort<std::__1::_ClassicAlgPolicy, boost::geome... (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/gis/overlaps.cc)
211 ms: dd::tables::Tables::Tables() (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/dd/impl/tables/tables.cc)
210 ms: spec_adder(rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjs... (/Users/laurynas/vilniusdb/mysql-8.0.33/router/src/rest_connection_pool/src/rest_connection_pool_plugin.cc)
209 ms: TlsServerContext::default_ciphers() (/Users/laurynas/vilniusdb/mysql-8.0.33/router/src/harness/src/tls_server_context.cc)
209 ms: main (/Users/laurynas/vilniusdb/mysql-8.0.33/client/mysqltest.cc)
207 ms: build_gcs_parameters(Gcs_interface_parameters&) (/Users/laurynas/vilniusdb/mysql-8.0.33/plugin/group_replication/src/plugin.cc)
205 ms: init_server_components() (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/mysqld.cc)
202 ms: void std::__1::__introsort<std::__1::_ClassicAlgPolicy, boost::geome... (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/gis/overlaps.cc)
200 ms: ConnectJoins(int, int, int, QEP_TAB*, THD*, CallingContext, std::__1... (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/sql_executor.cc)
194 ms: lock_wait_timeout_thread() (/Users/laurynas/vilniusdb/mysql-8.0.33/storage/innobase/lock/lock0wait.cc)
193 ms: void std::__1::__introsort<std::__1::_ClassicAlgPolicy, boost::geome... (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/gis/crosses.cc)
187 ms: (anonymous namespace)::CostingReceiver::FoundSingleNode(int) (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/join_optimizer/join_optimizer.cc)
186 ms: handle_slave_io (/Users/laurynas/vilniusdb/mysql-8.0.33/sql/rpl_replica.cc)
**** Function sets that took longest to compile / optimize:
13251 ms: bool boost::geometry::detail::partition::partition_two_ranges<$>::ap... (562 times, avg 23 ms)
4962 ms: void std::__1::__introsort<$>(boost::geometry::detail::overlay::turn... (46 times, avg 107 ms)
2395 ms: bool boost::geometry::detail::partition::partition_two_ranges<$>::ap... (104 times, avg 23 ms)
2264 ms: std::__1::ostreambuf_iterator<$> std::__1::__pad_and_output<$>(std::... (536 times, avg 4 ms)
1943 ms: void std::__1::__introsort<$>(boost::geometry::detail::relate::linea... (26 times, avg 74 ms)
1717 ms: std::__1::basic_ostream<$>& std::__1::__put_character_sequence<$>(st... (536 times, avg 3 ms)
1657 ms: std::__1::basic_stringbuf<$>::str() const (180 times, avg 9 ms)
1298 ms: unsigned int std::__1::__sort3<$>(boost::geometry::detail::overlay::... (46 times, avg 28 ms)
1248 ms: bool boost::geometry::partition<$>::apply<$>(boost::geometry::sectio... (281 times, avg 4 ms)
1224 ms: unsigned int std::__1::__sort5<$>(boost::geometry::detail::overlay::... (46 times, avg 26 ms)
1220 ms: void std::__1::__tree_balance_after_insert<$>(std::__1::__tree_node_... (317 times, avg 3 ms)
1211 ms: std::__1::deque<$>::__add_back_capacity() (94 times, avg 12 ms)
1049 ms: bool boost::geometry::detail::overlay::get_turn_info_for_endpoint<$>... (52 times, avg 20 ms)
991 ms: bool boost::geometry::detail::partition::partition_one_range<$>::app... (104 times, avg 9 ms)
968 ms: spec_adder(rapidjson::GenericDocument<$>&) (4 times, avg 242 ms)
968 ms: std::__1::__tree_node_base<$>*& std::__1::__tree<$>::__find_equal<$>... (253 times, avg 3 ms)
956 ms: bool boost::geometry::detail::partition::partition_two_ranges<$>::ap... (64 times, avg 14 ms)
939 ms: (anonymous namespace)::Function_factory<$>::create_func(THD*, MYSQL_... (270 times, avg 3 ms)
938 ms: std::__1::basic_stringbuf<$>::overflow(int) (180 times, avg 5 ms)
922 ms: classic_protocol::Codec<$>::decode(net::const_buffer const&, std::__... (70 times, avg 13 ms)
884 ms: bool boost::geometry::detail::partition::partition_two_ranges<$>::ap... (40 times, avg 22 ms)
866 ms: boost::geometry::policies::relate::segments_intersection_policy<$>::... (30 times, avg 28 ms)
864 ms: std::__1::basic_string<$>::basic_string[abi:v15006]<$>(char const*) (351 times, avg 2 ms)
837 ms: rapidjson::internal::Schema<$>::Schema(rapidjson::GenericSchemaDocum... (5 times, avg 167 ms)
814 ms: bool std::__1::__insertion_sort_incomplete<$>(boost::geometry::detai... (46 times, avg 17 ms)
813 ms: void std::__1::__introsort<$>(boost::geometry::detail::relate::linea... (14 times, avg 58 ms)
810 ms: std::__1::__tree<$>::destroy(std::__1::__tree_node<$>*) (443 times, avg 1 ms)
808 ms: unsigned int std::__1::__sort4<$>(boost::geometry::detail::overlay::... (46 times, avg 17 ms)
795 ms: void std::__1::__tree_remove<$>(std::__1::__tree_node_base<$>*, std:... (90 times, avg 8 ms)
788 ms: std::__1::vector<$>::~vector[abi:v15006]() (418 times, avg 1 ms)
*** Expensive headers:
181934 ms: /Users/laurynas/vilniusdb/mysql-8.0.33/sql/sql_class.h (included 587 times, avg 309 ms), included via:
mysql_thd_attributes_imp.cc.o (936 ms)
replicated_columns_view.cc.o replicated_columns_view.h column_filter_factory.h column_filter_inbound_func_indexes.h column_filter.h (910 ms)
mysql_connection_attributes_iterator_imp.cc.o (838 ms)
ndb_create_helper.cc.o (812 ms)
sql_class.cc.o (810 ms)
replicated_columns_view_with_gipk_on_source.cc.o replicated_columns_view_with_gipk_on_source.h replicated_columns_view.h column_filter_factory.h column_filter_inbound_func_indexes.h column_filter.h (771 ms)
...
140903 ms: /Users/laurynas/vilniusdb/mysql-8.0.33/include/m_string.h (included 1793 times, avg 78 ms), included via:
my_print_defaults.cc.o (428 ms)
my_strtoll10.cc.o (412 ms)
file.cc.o buf0checksum.h buf0types.h os0event.h univ.i (406 ms)
NdbThread.cpp.o ndb_global.h (389 ms)
AccLock.cpp.o AccLock.hpp SignalData.hpp ndb_global.h (386 ms)
NdbReceiver.cpp.o API.hpp ndb_global.h (382 ms)
...
129393 ms: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/usr/include/c++/v1/__functional/boyer_moore_searcher.h (included 2549 times, avg 50 ms), included via:
bgc_ticket_manager.h atomic_bgc_ticket_guard.h functional (231 ms)
acl_table_user.h functional (228 ms)
config_parser.h functional (217 ms)
dynamic_privilege_table.h functional (217 ms)
loader_config.h config_parser.h functional (210 ms)
random_generator.h random discrete_distribution.h numeric functional (208 ms)
...
114343 ms: /Users/laurynas/vilniusdb/mysql-8.0.33/include/lex_string.h (included 1195 times, avg 95 ms), included via:
sql_authentication.cc.o sql_authentication.h (329 ms)
audit_api_connection_service_imp.cc.o sql_audit.h (308 ms)
dd_trigger.cc.o dd_trigger.h (305 ms)
sql_hints.yy.cc.o (299 ms)
sql_user_table.cc.o sql_user_table.h sql_system_table_check.h log_builtins.h log.h (297 ms)
show_query_builder.cc.o show_query_builder.h (292 ms)
...
105206 ms: /Users/laurynas/vilniusdb/mysql-8.0.33/sql/field.h (included 634 times, avg 165 ms), included via:
table_access_service.cc.o (733 ms)
rpl_sys_table_access.cc.o rpl_sys_table_access.h (611 ms)
sql_select.cc.o sql_select.h (597 ms)
field.cc.o (597 ms)
row.cc.o (581 ms)
lob0update.cc.o (577 ms)
...
95348 ms: /Users/laurynas/vilniusdb/mysql-8.0.33/sql/table.h (included 779 times, avg 122 ms), included via:
dd_routine.cc.o dd_routine.h (633 ms)
global.cc.o global.h (582 ms)
table.cc.o (551 ms)
zlob0update.cc.o (493 ms)
rpl_sys_key_access.cc.o rpl_sys_key_access.h (488 ms)
table_replication_group_member_actions.cc.o rpl_sys_key_access.h (369 ms)
...
94011 ms: /Users/laurynas/vilniusdb/mysql-8.0.33/storage/innobase/include/univ.i (included 209 times, avg 449 ms), included via:
mach0data.cc.o mach0data.h mtr0types.h sync0rw.h (710 ms)
buf0block_hint.cc.o buf0block_hint.h buf0types.h os0event.h (705 ms)
btr0sea.cc.o btr0sea.h (700 ms)
srv0tmp.cc.o srv0tmp.h srv0srv.h buf0checksum.h buf0types.h os0event.h (684 ms)
file.cc.o buf0checksum.h buf0types.h os0event.h (681 ms)
btr0btr.cc.o btr0btr.h btr0types.h (674 ms)
...
93077 ms: /Users/laurynas/vilniusdb/mysql-8.0.33/sql/log_event.h (included 241 times, avg 386 ms), included via:
global.cc.o global.h context.h (889 ms)
log_event.cc.o (879 ms)
context.cc.o context.h (862 ms)
recovery.cc.o recovery.h global.h context.h (811 ms)
iterators.cc.o iterators.h binlog_reader.h (775 ms)
binlog_istream.cc.o (775 ms)
...
91706 ms: /Users/laurynas/vilniusdb/mysql-8.0.33/sql/handler.h (included 842 times, avg 108 ms), included via:
ha_example.cc.o ha_example.h (756 ms)
ha_mock.cc.o ha_mock.h (685 ms)
page_track_service.cc.o (649 ms)
ha_tina.cc.o ha_tina.h (614 ms)
ha_archive.cc.o ha_archive.h (580 ms)
api0misc.cc.o api0misc.h (575 ms)
...
87795 ms: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/usr/include/c++/v1/__memory/shared_ptr.h (included 2580 times, avg 34 ms), included via:
AccLock.hpp SignalData.hpp ndb_global.h m_string.h algorithm memory (102 ms)
dynamic_privilege_table.h functional boyer_moore_searcher.h (98 ms)
signing_key.h string memory (97 ms)
ndb_global.h m_string.h algorithm memory (96 ms)
dict0dict.h set __node_handle memory (93 ms)
my_byteorder.h template_utils.h algorithm memory (93 ms)
...
done in 0.8s.
What changed?
- "Files that took longest to parse (compiler frontend)": all GIS
- "Files that took longest to codegen (compiler backend)": all GIS
- "Templates that took longest to instantiate": all those
std::function gone, so
must have been tests. Something about MDL remaining.
- "Template sets that took longest to instantiate":
std::unique_ptr. Oh well.
- "Functions that took longest to compile":
MYSQLparse (no surprise there), system
variables handling, 3rd party code, and variety of other things
- "Function sets that took longest to compile / optimize:": Boost/GIS, the standard
library.
- "Expensive headers":
sql_class.h, and the C++ standard library headers mostly
gone together with shared_ptr (so it was tests using it).
Interestingly (and usefully) this provides a different kind of insight than what Mark
discovered for Meta branch: it would not discover RocksDB being compiled three
times. It would be great if the MySQL developers looked into this tool, which seems
very easy to use, and reducing compilation times. That sql_class.h file is way
overdue for splitting!