Para muito alívio imediato, depois de rever o seu manual de referência, considere
set global read_rnd_buffer_size=256K; # from 16M per connection
Isso pode ser feito dinamicamente.
O login após isso ser feito não exigirá 16 milhões por login.
Por que ler 16M (mesmo que seja da RAM) quando 256K vai ficar bem?
Depois de postar outros itens solicitados, terei sugestões adicionais.
----- 2017 11 04 -------------
As sugestões a seguir precisam de sua pesquisa antes de implementar APENAS um item por dia. Alguns podem ser aplicados dinamicamente. Valores sugeridos de cfg / ini seguem para a seção [mysqld] e podem ser modificados, adicionados ou removidos.
max_connections=200 #from 40000 to support your 103 max_used_connections
max_user_connections=200 #from 10000 to be matched with max_connections
key_buffer_size REMOVE for default of 64M. less than 1% of 1200MB used
thread_cache_size=100 #from 50 to support your 103 max_used_connections - cap at 100 per V8
thread_concurrency=33 #from 10 for about 30% active
max_connect_errors=10 #from 5000, to better control hacker passwd guessing
innodb_print_all_deadlocks=1 # from OFF, if you ever have one, you need this data in error log
#### these are PER CONNECTION values driving your RAM footprint up the wall
#read_buffer_size or REMOVE for default of 128K vs 4M RAM
#read_rnd_buffer_size or REMOVE for default of 256K vs 16M RAM
#join_buffer_size or REMOVE for default of 128K vs 128MB RAM
O uso do MySQLCalculator.com ajudará você a ver quanta RAM você pode exigir se 40000 conexões simultâneas forem bem-sucedidas (o que provavelmente não acontecerá) - appx 6 Terabytes de RAM seriam necessários.
Para uma análise adicional dos resultados que refletem as mudanças implementadas, APÓS 7 dias de tempo de atividade, poste resultados de texto completos de
SHOW GLOBAL STATUS;
SHOW GLOBAL VARIABLES;
SHOW ENGINE INNODB STATUS;
e repost completa my.cnf.