Slide 15
Slide 15 text
● Too many databases
acl_get() too heavy for
show databases
Physical MariaDB Servers
Evaluations
Samples: 15K of event 'cycles', Event count (approx.): 41470603374
Children Self Command Shared Object
Symbol
+ 97.89% 0.00% mysqld mysqld
[.] mysql_execute_command
+ 97.89% 0.00% mysqld mysqld
[.] execute_sqlcom_select
+ 97.89% 0.00% mysqld mysqld
[.] handle_select
+ 97.89% 0.00% mysqld mysqld
[.] mysql_select
+ 97.89% 0.00% mysqld mysqld
[.] JOIN::exec
+ 97.89% 0.00% mysqld mysqld
[.] JOIN::exec_inner
+ 97.89% 0.00% mysqld mysqld
[.] get_schema_tables_result
+ 97.88% 0.03% mysqld mysqld
[.] fill_schema_schemata
+ 72.06% 71.89% mysqld libc-2.17.so
[.] __strcmp_sse42
+ 19.57% 18.73% mysqld mysqld
[.] acl_get
+ 5.77% 5.77% mysqld mysqld
[.] strcmp@plt
Take a look at acl_get()
global elapsed;
probe process("/usr/sbin/mysqld").function("acl_get").return
{
elapsed += gettimeofday_ms() - @entry(gettimeofday_ms());
}
probe end { printf("%d ms\n", elapsed); }
output:
16052 ms (~16s).
Summary
=========
Root user has all rights, thus it doesn't check for acl_get().
Regular user has strict rights, thus it takes to return on every
table..