Se houver índice para uma coluna, isso acelerará a pesquisa se a condição for ... WHERE column IS NULL
? Na verdade, é um índice composto em 2 colunas e a segunda coluna pode ser NULL ( WHERE col1 = X AND col2 IS NULL
).
Recentemente, tive uma falha no mariadb que deu início a um pesadelo. Quando restaurei dumps, às vezes o daemon travava durante inserções em massa. Isso aconteceu apenas nas poucas tabelas "grandes" do innodb (tenho muitos bancos de dados pequenos que realmente não contêm muitos dados e a maioria dos outros possui uma quantidade significativa apenas em algumas tabelas). O banco de dados geralmente se recuperava eventualmente (às vezes depois de horas), mas às vezes travava. Restaurei o banco de dados em uma máquina diferente sem problemas em questão de minutos e depois movi o diretório de dados na máquina de produção. A única diferença séria entre os dois é que a máquina de sucesso não é uma VM e sim um armazenamento SSD esportivo.
Desde então, os problemas descritos ainda acontecem, em momentos aleatórios, sempre ao acessar aquelas tabelas grandes. Geralmente terei várias consultas congeladas, mas apenas uma às vezes é suficiente para acionar o comportamento.
O que acho realmente difícil de acreditar é o fato de que o iotop relata um thread mariadb gravando gigabytes por segundo , de forma constante, durante todo o tempo em que a consulta trava. Isso é fisicamente impossível, já que o desempenho dos discos não chega nem perto desses números. Também vasculhei a internet para encontrar o que pude sobre como otimizar configurações que até alguns dias atrás pareciam perfeitamente adequadas para o meu ambiente, ajustei algumas variáveis, mas nada importante, também os padrões na máquina "importação bem-sucedida" não eram muito diferentes começar com.
O problema é semelhante a https://jira.mariadb.org/browse/MDEV-30884 , no entanto, isso foi supostamente corrigido porque estou usando o 10.6.14 (também testei o 10.6.15) no Gentoo.
Estou perplexo, o que poderia estar causando isso? O armazenamento mecânico do HDD pode de alguma forma justificar o que está acontecendo?
Estou migrando um pacote SSIS do SQL Server 2012 para um novo servidor 2022. O pacote usa a tarefa Executar Pacote dentro de um loop para executar outro pacote no projeto. Estou descobrindo que na primeira vez que a tarefa Executar Pacote é executada, parece que demora muito para iniciar e não sei por que ou onde procurar uma causa.
A parte relevante do pacote principal é esta:
Observando os tempos de execução, a primeira vez que o pacote Generic Parsing é chamado leva mais de 10 segundos (a coluna final em ms), mas os componentes do pacote levam apenas uma fração desse tempo. As execuções subsequentes da Análise Genérica (também mostradas nos resultados) são executadas conforme esperado, sem aquele atraso inicial.
Foi-nos atribuído um novo aplicativo em que o fornecedor espera que o banco de dados cresça para cerca de 100 TB. Eles mencionaram que o SQL Server Standard Edition é compatível.
Minha pergunta é se o SQL Server Standard Edition pode lidar adequadamente com um banco de dados desse tamanho?
A Enterprise Edition pode lidar com a reconstrução de índices online, mas no geral o SQL Server pode lidar com um banco de dados tão grande?
O maior banco de dados que gerenciei tem 3 TB e estou preocupado com o desempenho de um banco de dados de 100 TB com o SQL Server 2019.
Quaisquer conselhos de especialistas serão muito apreciados.
Minha pergunta básica é: o que afeta o desempenho de \d
?
Eu tenho um esquema separado (pequeno) que gerencio em um servidor de banco de dados no qual não tenho privilégios superiores. O servidor contém um enorme banco de dados (mais de bilhões de linhas) em seu esquema público. Meu esquema separado fornece algumas informações auxiliares usadas apenas para renderização de dados na página da Web no esquema público.
Editar : na verdade, são mais de 5,5 bilhões de linhas, e isso está apenas em uma das maiores tabelas (e levou apenas 1,5 horas para terminar count(*)
!).
Quando faço um simples \d
no prompt do psql, é muito lento - da ordem de 6,5 segundos quando cronometro. Claramente, o banco de dados/servidor de banco de dados tem carga pesada, mas devo levar esse \d
desempenho à atenção dos administradores de sistemas (que geralmente não querem ser incomodados)? (Isso implica algo marcadamente errado no sistema?) Todo o resto no meu esquema é executado na ordem de milissegundos, portanto, não afeta o desempenho do meu esquema em si .
Independentemente de eu chamar a atenção deles, o que impacta o desempenho de \d
? O esquema público possui 985 tabelas. Mesmo assim, parece que seria uma consulta bastante simples; Eu esperaria que estivesse apenas olhando os nomes das tabelas, não o conteúdo das tabelas.
Tenho um servidor SQl 2019 em um núcleo padrão do Windows Server 2019, gerencio dois tipos de backup, um com planos de manutenção e outro com Veeam Backup. Os planos de manutenção estão ok, o backup com Veeam falha todos os dias com erro no SQL deixando o SQLServerWriter no estado Failed com último erro Erro não repetível. Abri um ticket no suporte da Veeam e lamentamos o log de variação e o problema não estava relacionado à Veeam porque mesmo criando backup com o comando vss há erros. De acordo com os logs, a tarefa de backup falha com o erro:
[11.09.2023 00:07:12] <01> Error Failed to create snapshot: Backup job failed.
[11.09.2023 00:07:12] <01> Error Cannot create a shadow copy of the volumes containing writer's data.
[11.09.2023 00:07:12] <01> Error A VSS critical writer has failed. Writer name: [SqlServerWriter].
Nos gravadores VSS, o erro pode ser observado:
Writer name: 'SqlServerWriter'
Writer Id: {a65faa63-5ea8-4ebc-9dbd-a0c4db26912a}
Writer Instance Id: {1fb6de2a-c593-45c2-b592-e90ff6aad393}
State: [8] Failed
Last error: Non-retryable error
Os seguintes erros podem ser observados nos eventos de aplicativos do Windows:
Log Name: Application
Source: SQLWRITER
Date: 11.09.2023 0:07:05
Event ID: 24583
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: SQL03Core
Description:
Sqllib error: OLEDB Error encountered calling ICommandText::Execute. hr = 0x80040e14. SQLSTATE: 42000, Native Error: 3013
Error state: 1, Severity: 16
Source: Microsoft SQL Server Native Client 11.0
Error message: BACKUP DATABASE is terminating abnormally.
SQLSTATE: 42000, Native Error: 3224
Error state: 1, Severity: 16
Source: Microsoft SQL Server Native Client 11.0
Error message: Cannot create worker thread.
Log Name: Application
Source: SQLWRITER
Date: 11.09.2023 0:07:05
Event ID: 24583
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: SQL03Core
Description:
Sqllib error: OLEDB Error encountered calling ICommandText::Execute. hr = 0x80040e14. SQLSTATE: 42000, Native Error: 3013
Error state: 1, Severity: 16
Source: Microsoft SQL Server Native Client 11.0
Error message: BACKUP DATABASE is terminating abnormally.
SQLSTATE: 42000, Native Error: 3202
Error state: 1, Severity: 16
Source: Microsoft SQL Server Native Client 11.0
Error message: Write on "{7F86B757-DC6E-4B76-B35D-F382797EB665}414" failed: 995(The I/O operation has been aborted because of either a thread exit or an application request.)
O servidor possui 536 bancos de dados e 8 núcleos, então o suporte da Veeam supõe que o problema estava relacionado a um número insuficiente de threads de trabalho, portanto de acordo com https://learn.microsoft.com/en-us/sql/database-engine /configure-windows/configure-the-max-worker-threads-server-configuration-option?view=sql-server-ver16 , alteramos o número de threads de trabalho para 1000, mas os erros continuam aumentando, então o suporte da Veeam sugere contar com ajuda para otimizar máquina e rosca de acordo com a carga.
Alguém pode sugerir uma maneira de proceder? Desculpe pelo meu inglês ruim e desde já agradeço... Stefano
Em uma instância do SSRS com um banco de dados ReportServer remoto, onde é feito o processamento? A instância SSRS vm deve obter cpus e memória adicionais ou a instância sql onde está o banco de dados ReportServer? As instâncias SQL de destino dos relatórios são boas em termos de CPU e memória. Obrigado!
Li na documentação do MySQL que é possível habilitar a geração de chaves primárias invisíveis ( https://dev.mysql.com/doc/refman/8.0/en/create-table-gipks.html ).
Sou um novato em administração de banco de dados, então gostaria de entender como adicionar uma chave primária invisível poderia melhorar o desempenho de consultas SELECT se a coluna invisível gerada não for usada nas cláusulas WHERE de tais consultas. E se não consegue melhorar o desempenho, então qual seria o interesse de habilitar esse recurso?
Tenho um banco de dados MariaDB 10.5.10, com uma tabela activity
composta por 150.000 linhas. ele contém:
- um
id
campo (inteiro, chave primária) - a
tenant
. Existem cerca de 85.000 linhas com inquilino = 12 - an
activity_type
(inteiro, atuando como uma chave para outra tabelaactivity_type
)
Outra tabela, activity_type
, tem 6 linhas, com um id
(chave primária, inteiro)
Essa consulta, que é gerada a partir de um ORB (e que praticamente não posso modificar) requer cerca de 4 a 5 segundos para ser executada e gostaria de fazê-la funcionar mais rápido:
select count(activity.id) from activity
left join activity_type on activity.type = activity_type.id
where tenant = 12 ;
Quando removo a left join
linha, ela roda muito mais rápido, cerca de 0,7 segundos.
Usando explain
, posso ver que sem left join
, a extra
coluna menciona using index
(na verdade, o índice da tenant
coluna):
explain select SQL_NO_CACHE count(activity.id) from activity
where tenant = 12;
Mas com left join
a extra
coluna está vazia:
explain select SQL_NO_CACHE count(activity.id) from activity
left join activity_type on activity.type = activity_type.id
where tenant = 12;
E com a cláusula left join
but NO where
, também mostra Using index
:
explain select SQL_NO_CACHE count(activity.id) from activity
left join activity_type on activity.type = activity_type.id;
Você poderia me ajudar a melhorar o desempenho quando as instruções LEFT JOIN
e as WHERE
estão presentes?
Observe que:
- o
LEFT JOIN
não adiciona nenhuma linha aos resultados, porque há apenas umaactivity_type
linha por atividade (também tentei adicionar umUNIQUE
índice noactivity_type.id
, mas não muda nada no desempenho) - porém preciso da
LEFT JOIN
declaração, pois em alguns casos, os usuários podem querer adicionar mais critérios (nawhere
cláusula) relacionados aos campos daactivity_type
tabela.
Muito obrigado!
Atualmente, estou trabalhando para otimizar o desempenho do meu banco de dados MariaDB e encontrei uma ferramenta chamada mysqltuner. Eu instalei e executei o mysqltuner em meu servidor, e ele me forneceu algumas recomendações e informações sobre o estado atual da minha configuração do MariaDB.
No entanto, estou procurando conselhos e orientações adicionais sobre como interpretar e implementar as sugestões fornecidas pelo mysqltuner de maneira eficaz.
Estou usando o servidor apenas para este banco de dados, mas o usuário me disse que as consultas são lentas porque o servidor não está ajustando corretamente o MariaDB 10.6, Apache 2.4.52.
Como posso interpretar as recomendações fornecidas pelo mysqltuner com precisão? O que as várias métricas e valores significam e como eles se relacionam com o desempenho do meu banco de dados MariaDB?
requisitos do servidor
CPU(s) 32 x Intel(R) Xeon(R) Silver 4314 CPU @ 2.40GHz
RAM 32 GB
Saída do Sintonizador MYSQL
>> MySQLTuner 2.2.6
[--] Skipped version check for MySQLTuner script
[OK] Logged in using credentials from Debian maintenance account.
[OK] Operating on 64-bit architecture
-------- Storage Engine Statistics --------------------------------------------- --------------------
[--] Status: +Aria +CSV +InnoDB +MEMORY +MRG_MyISAM +MyISAM +PERFORMANCE_SCHEMA +SEQUENCE
[--] Data in Aria tables: 32.0K (Tables: 1)
[--] Data in MyISAM tables: 13.3M (Tables: 165)
[--] Data in InnoDB tables: 33.4G (Tables: 2578)
[--] Data in MEMORY tables: 0B (Tables: 6)
[OK] Total fragmented tables: 0
[OK] Currently running supported MySQL version 10.6.14-MariaDB-1:10.6.14+maria~u bu2204
-------- Log file Recommendations ---------------------------------------------- --------------------
[!!] Log file doesn't exist
-------- Analysis Performance Metrics ------------------------------------------ --------------------
[--] innodb_stats_on_metadata: OFF
[OK] No stat updates during querying INFORMATION_SCHEMA.
Use of uninitialized value $opt{"structstat"} in numeric eq (==) at
./mysqltuner.pl line 5810 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.
To help you figure out what was undefined, perl will try to tell you
the name of the variable (if any) that was undefined. In some cases
it cannot do this, so it also tells you what operation you used the
undefined value in. Note, however, that perl optimizes your program
and the operation displayed in the warning may not necessarily appear
literally in your program. For example, "that $foo" is usually
optimized into "that " . $foo, and the warning will refer to the
concatenation (.) operator, even though there is no . in
your program.
-------- CVE Security Recommendations ------------------------------------------ --------------------
[OK] NO SECURITY CVE FOUND FOR YOUR VERSION
-------- Performance Metrics --------------------------------------------------- --------------------
[--] Up for: 3d 0h 50m 58s (27M q [106.285 qps], 5M conn, TX: 29G, RX: 3G)
[--] Reads / Writes: 92% / 8%
[--] Binary logging is disabled
[--] Physical Memory : 31.3G
[--] Max MySQL memory : 86.1G
[--] Other process memory: 0B
[--] Total buffers: 15.3G global + 480.6M per thread (151 max threads)
[--] Performance_schema Max memory usage: 0B
[--] Galera GCache Max memory usage: 0B
[!!] Maximum reached memory usage: 86.6G (276.42% of installed RAM)
[!!] Maximum possible memory usage: 86.1G (274.92% of installed RAM)
[!!] Overall possible memory usage with other process exceeded memory
[OK] Slow queries: 0% (27/27M)
[!!] Highest connection usage: 100% (152/151)
[OK] Aborted connections: 0.21% (12101/5634183)
[!!] Name resolution is active: a reverse name resolution is made for each new c onnection which can reduce performance
[OK] Query cache is disabled by default due to mutex contention on multiprocesso r machines.
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 1M sorts)
[!!] Joins performed without indexes: 30037
[OK] Temporary tables created on disk: 2% (28K on disk / 997K total)
[OK] Thread cache hit rate: 99% (253 created / 5M connections)
[OK] Table cache hit rate: 99% (26M hits / 27M requests)
[!!] table_definition_cache (400) is less than number of tables (3041)
[OK] Open file limit used: 0% (121/16K)
[OK] Table locks acquired immediately: 100% (189K immediate / 189K locks)
-------- Performance schema ---------------------------------------------------- --------------------
[!!] Performance_schema should be activated.
[--] Sys schema is installed.
-------- ThreadPool Metrics ---------------------------------------------------- --------------------
[--] ThreadPool stat is disabled.
Use of uninitialized value $opt{"myisamstat"} in numeric eq (==) at
./mysqltuner.pl line 3860 (#1)
-------- InnoDB Metrics -------------------------------------------------------- --------------------
[--] InnoDB is enabled.
[OK] InnoDB File per table is activated
[OK] InnoDb Buffer Pool size ( 128.0M ) under limit for 64 bits architecture: (1 7179869184.0G )
[!!] InnoDB buffer pool / data size: 128.0M / 33.4G
[!!] Ratio InnoDB log file size / InnoDB Buffer pool size (75%): 96.0M * 1 / 128 .0M should be equal to 25%
[--] Number of InnoDB Buffer Pool Chunk: 1 for 1 Buffer Pool Instance(s)
[OK] Innodb_buffer_pool_size aligned with Innodb_buffer_pool_chunk_size & Innodb _buffer_pool_instances
[OK] InnoDB Read buffer efficiency: 99.87% (157285991602 hits / 157486582048 tot al)
[!!] InnoDB Write Log efficiency: 49.38% (563905 hits / 1141959 total)
[OK] InnoDB log waits: 0.00% (0 waits / 578054 writes)
-------- Aria Metrics ---------------------------------------------------------- --------------------
[--] Aria Storage Engine is enabled.
[OK] Aria pagecache size / total Aria indexes: 128.0M/336.0K
[OK] Aria pagecache hit rate: 99.9% (27M cached / 27K reads)
-------- TokuDB Metrics -------------------------------------------------------- --------------------
[--] TokuDB is disabled.
-------- XtraDB Metrics -------------------------------------------------------- --------------------
[--] XtraDB is disabled.
-------- Galera Metrics -------------------------------------------------------- --------------------
[--] Galera is disabled.
-------- Replication Metrics --------------------------------------------------- --------------------
[--] Galera Synchronous replication: NO
[--] No replication slave(s) for this server.
[--] Binlog format: MIXED
[--] XA support enabled: ON
[--] Semi synchronous replication Master: OFF
[--] Semi synchronous replication Slave: OFF
[--] This is a standalone server
recomendação mysqltuner
-------- Recommendations ------------------------------------------------------- --------------------
General recommendations:
Reduce your overall MySQL memory footprint for system stability
Dedicate this server to your database for highest performance.
Reduce or eliminate persistent connections to reduce connection usage
Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=ON
We will suggest raising the 'join_buffer_size' until JOINs not using indexes are found.
See https://dev.mysql.com/doc/internals/en/join-buffer-size.html
(specially the conclusions at the bottom of the page).
Performance schema should be activated for better diagnostics
Be careful, increasing innodb_log_file_size / innodb_log_files_in_group means higher crash recovery mean time
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
max_connections (> 151)
wait_timeout (< 28800)
interactive_timeout (< 28800)
skip-name-resolve=ON
join_buffer_size (> 256.0K, or always use indexes with JOINs)
table_definition_cache (400) > 3041 or -1 (autosizing if supported)
performance_schema=ON
innodb_buffer_pool_size (>= 33.4G) if possible.
innodb_log_file_size should be (=32M) if possible, so InnoDB total log file size equals 25% of buffer pool size.
meu cnf por favor dê sugestão por favor o que precisa adicionar
[client-server]
# Port or socket location where to connect
# port = 3306
socket = /run/mysqld/mysqld.sock
# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
Eu apreciaria muito quaisquer insights, explicações ou recursos relacionados ao uso do mysqltuner para ajuste de desempenho do MariaDB. Agradecemos antecipadamente por sua valiosa ajuda!