Query com muita lentidão

1. Query com muita lentidão

Glauco Perucchi
glaucoperucchi

(usa Debian)

Enviado em 22/11/2016 - 14:18h

Pessoal,

Preciso de uma ajuda.

Exportei uma tabela do MSSQL para txt e importei para o MySQL utilizando o comando LOAD DATA LOCAL INFILE, o problema é que no MSSQL a query leva 1 minutos e no MySQL esta levando 23 minutos.

Essa é a query:
SELECT a.NumeroContrato,a.DescricaoAgendamento FROM Historico_de_Agendamentos a where a.DataHoraMudanca = (SELECT max(DataHoraMudanca) FROM Historico_de_Agendamentos b where NumeroContrato = a.NumeroContrato group by NumeroContrato);

Configuração do MySQL:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /neo/mysql
tmpdir = /neo/tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address = 0.0.0.0
key_buffer = 16M
max_allowed_packet = 100G
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 40
query_cache_limit = 1M
query_cache_size = 1M
innodb-flush-method = O_DIRECT
innodb_buffer_pool_size = 14G
max_heap_table_size = 32M
tmp_table_size = 16M
log_error = /var/log/mysql/error.log
slow_query_log_file = /var/log/mysql/mysql-slow.log
slow_query_log = 1
expire_logs_days = 10
max_binlog_size = 100M
[mysqldump]
quick
quote-names
max_allowed_packet = 100G
[mysql]
[isamchk]
key_buffer = 16M
!includedir /etc/mysql/conf.d/


  


2. Re: Query com muita lentidão

Carlos Henrique de Oliveira Monteiro André
carloschoma

(usa Debian)

Enviado em 23/11/2016 - 09:18h

Olá glauco.skt,
poderia apresentar a estrutura de índices de suas tabela?

Inicialmente os índices que necessitam são:
Historico_de_Agendamentos.DataHoraMudanca
Historico_de_Agendamentos.NumeroContrato




3. Re: Query com muita lentidão

Ricardo Fabiano Silva
madrugada

(usa Gentoo)

Enviado em 23/11/2016 - 10:31h

@glauco.skt, verifique quais eram os índices existentes no SQL Server e recrie esses índices no MySQL.

Outro ponto importante é a formatação do sistema de arquivos. Pra MS SQL Server, o mais usado é NTFS com blocos de 64k. Se o arquivo da base de dados estiver num sistema de arquivos ext4, cada bloco será de no máximo 4k(4096 bites). Se estiver em XFS pode chegar a 64k, mas depende de como foi efetuada a formatação. O próprio NTFS define 4K por padrão. DBA's mais caprichosos formatam com 64 por ser mais performático.
Existe um ótimo artigo aqui no VOL sobre como "tunar sistemas de arquivos".


4. Re: Query com muita lentidão

Glauco Perucchi
glaucoperucchi

(usa Debian)

Enviado em 24/11/2016 - 14:07h

@carloschoma aqui esta a estrutura, adicionei os indices como comentasse, baixou para 9 minutos o select.
mysql> describe Historico_de_Agendamentos;
+----------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+-------+
| NumeroContrato | varchar(50) | YES | MUL | NULL | |
| DescricaoAgendamento | varchar(100) | YES | | NULL | |
| DataHoraMudanca | datetime | YES | MUL | NULL | |
| NomeFuncionario | varchar(200) | YES | | NULL | |
+----------------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

@madrugada criei uma partição em XFS de acordo com o tutorial que indicasse, mas não surtiu efeito, continua levando o mesmo tempo.


5. Re: Query com muita lentidão

Glauco Perucchi
glaucoperucchi

(usa Debian)

Enviado em 24/11/2016 - 14:31h

Resultado do comando iostat

Linux 3.16.0-4-amd64 (gn01neo02) 24-11-2016 _x86_64_ (10 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0,22 0,00 0,03 1,02 0,00 98,73

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
fd0 0,00 0,00 0,00 8 0
sdb 0,01 0,04 0,00 3145 12
sda 4,06 716,91 4,55 53314747 338340
sdc 2,07 9,58 698,87 712110 51973299


6. Re: Query com muita lentidão

Ricardo Fabiano Silva
madrugada

(usa Gentoo)

Enviado em 24/11/2016 - 18:09h

Pergunta básica: A máquina do MSSQL e do My SQL são a mesma?(digamos que use dual boot)

O HD é o mesmo?

Dependendo da configuração da máquina, o resultado pode favorecer algum SGBD.


7. Re: Query com muita lentidão

Carlos Henrique de Oliveira Monteiro André
carloschoma

(usa Debian)

Enviado em 24/11/2016 - 18:27h

@glauco.skt, a SQL é para trazer os contratos e sua maior dataHora? Executa somente a SQL interna e veja se esta demorando.

Pode ter diferença de desempenho entre os bancos mas 9 minutos eh muita coisa.

Carlos


8. Re: Query com muita lentidão

Glauco Perucchi
glaucoperucchi

(usa Debian)

Enviado em 25/11/2016 - 08:53h

Já utilizei até o migration do mysqlworkbench no mesmo servidor, Mesmo S.O, onde esta rodando o MSSQL e executei a query no terminal do mysql, então problema de hardware não é.

Já exportei também a base e importei em um servidor com Debian, mesma coisa, com índice 9 minutos, sem índice 23 minutos e o mais estranho, no MSSQL não tem índice nessa tabela.

Tentei importar no Postgres também, mas este não consegui fazer a importação, pra ver se iria demorar também.

Vou continuar tentando aqui!


9. Re: Query com muita lentidão

Ricardo Fabiano Silva
madrugada

(usa Gentoo)

Enviado em 25/11/2016 - 10:30h

glauco.skt escreveu:
[...]
Já exportei também a base e importei em um servidor com Debian, mesma coisa, com índice 9 minutos, sem índice 23 minutos e o mais estranho, no MSSQL não tem índice nessa tabela.
[...]


Se a tabela tem PK, automaticamente ela tem um índice. No MSSQL, toda PK é um índice clusterizado e unique.


10. Re: Query com muita lentidão

Glauco Perucchi
glaucoperucchi

(usa Debian)

Enviado em 25/11/2016 - 11:36h

Nessa tabela não tem PK, já verifiquei, estão iguais as duas.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts