Hi,

Every night we see new entries in mysql slow-query log which look like this:

# Query_time: 72.057146  Lock_time: 0.000240  Rows_sent: 1454850  
Rows_examined: 17178331
SET timestamp=1493248276;
SELECT Path.Path, Filename.Name, T1.FileIndex, T1.JobId, LStat, DeltaSeq      
FROM ( SELECT FileId, Job.JobId AS JobId, FileIndex, File.PathId AS PathId, 
File.FilenameId AS FilenameId, LStat     , DeltaSeq, Job.JobTDate AS JobTDate 
FROM Job, File, ( SELECT MAX(JobTDate) AS JobTDate, PathId, FilenameId FROM ( 
SELECT JobTDate, PathId, FilenameId FROM File JOIN Job USING (JobId) WHERE 
File.JobId IN (1141112,1141820,1142374,1143005) UNION ALL SELECT JobTDate, 
PathId, FilenameId FROM BaseFiles JOIN File USING (FileId) JOIN Job  ON    
(BaseJobId = Job.JobId) WHERE BaseFiles.JobId IN 
(1141112,1141820,1142374,1143005) ) AS tmp GROUP BY PathId, FilenameId ) AS T1 
WHERE (Job.JobId IN ( SELECT DISTINCT BaseJobId FROM BaseFiles WHERE JobId IN 
(1141112,1141820,1142374,1143005)) OR Job.JobId IN 
(1141112,1141820,1142374,1143005)) AND T1.JobTDate = Job.JobTDate AND Job.JobId 
= File.JobId AND T1.PathId = File.PathId AND T1.FilenameId = File.FilenameId ) 
AS T1 JOIN Filename ON (Filename.FilenameId = T
 1.FilenameId) JOIN Path ON (Path.PathId = T1.PathId) WHERE FileIndex > 0 ORDER 
BY T1.JobTDate, FileIndex ASC;

We run Full backup on Saturday followed by 6 Incremental to Disk followed by 
Copy jobs to Tape. Below are a few numbers about our database,  the server runs 
Bacula 7.4.7 on CentOS 7.3, 128GB Ram, Intel(R) Xeon(R) CPU E5-2620 v3 @ 
2.40GHz.  Database index is almost in memory, InnoDB is used as storage engine 
(one file per table) and i don't see any disk activity while the above SELECT 
is running.

Is the query really slow related to database size, or is it just slow on 
mariadb 5.5.52, or would a new index or modified help?  

Maybe an index on Job.JobTDate would help,  JobHisto.JobTDate is indexed ?


$ du -h -s /var/lib/mysql/bacula/
316G    /var/lib/mysql/bacula/

MariaDB [bacula]> select count(*) from File;
+------------+
| count(*)   |
+------------+
| 2005237279 |
+------------+
MariaDB [bacula]> select count(*) from Filename;
select cou+----------+
| count(*) |
+----------+
| 50002655 |
+----------+
1 row in set (7.00 sec)

MariaDB [bacula]> select count(*) from Job;
+----------+
| count(*) |
+----------+
|   189213 |
+----------+

MariaDB [bacula]> explain SELECT Path.Path, Filename.Name, T1.FileIndex, 
T1.JobId, LStat, DeltaSeq      FROM ( SELECT FileId, Job.JobId AS JobId, 
FileIndex, File.PathId AS PathId, File.FilenameId AS FilenameId, LStat     , 
DeltaSeq, Job.JobTDate AS JobTDate FROM Job, File, ( SELECT MAX(JobTDate) AS 
JobTDate, PathId, FilenameId FROM ( SELECT JobTDate, PathId, FilenameId FROM 
File JOIN Job USING (JobId) WHERE File.JobId IN 
(1141112,1141820,1142374,1143005) UNION ALL SELECT JobTDate, PathId, FilenameId 
FROM BaseFiles JOIN File USING (FileId) JOIN Job  ON    (BaseJobId = Job.JobId) 
WHERE BaseFiles.JobId IN (1141112,1141820,1142374,1143005) ) AS tmp GROUP BY 
PathId, FilenameId ) AS T1 WHERE (Job.JobId IN ( SELECT DISTINCT BaseJobId FROM 
BaseFiles WHERE JobId IN (1141112,1141820,1142374,1143005)) OR Job.JobId IN 
(1141112,1141820,1142374,1143005)) AND T1.JobTDate = Job.JobTDate AND Job.JobId 
= File.JobId AND T1.PathId = File.PathId AND T1.FilenameId = File.FilenameId ) 
AS T1 JOIN Filename O
 N (Filename.FilenameId = T1.FilenameId) JOIN Path ON (Path.PathId = T1.PathId) 
WHERE FileIndex > 0 ORDER BY T1.JobTDate, FileIndex ASC;
+------+--------------+------------+--------+---------------------+---------+---------+------------------------------------------+--------+----------------------------------------------+
| id   | select_type  | table      | type   | possible_keys       | key     | 
key_len | ref                                      | rows   | Extra             
                           |
+------+--------------+------------+--------+---------------------+---------+---------+------------------------------------------+--------+----------------------------------------------+
|    1 | SIMPLE       | Job        | ALL    | PRIMARY             | NULL    | 
NULL    | NULL                                     | 193606 | Using where; 
Using temporary; Using filesort |
|    1 | SIMPLE       | <derived3> | ref    | key0                | key0    | 9 
      | bacula.Job.JobTDate                      |     10 |                     
                         |
|    1 | SIMPLE       | Path       | eq_ref | PRIMARY             | PRIMARY | 4 
      | T1.PathId                                |      1 |                     
                         |
|    1 | SIMPLE       | Filename   | eq_ref | PRIMARY             | PRIMARY | 4 
      | T1.FilenameId                            |      1 |                     
                         |
|    1 | SIMPLE       | File       | ref    | JobId,JobId_2       | JobId_2 | 
12      | bacula.Job.JobId,T1.PathId,T1.FilenameId |      1 | Using where       
                           |
|    6 | MATERIALIZED | BaseFiles  | ALL    | basefiles_jobid_idx | NULL    | 
NULL    | NULL                                     |      1 | Using where       
                           |
|    3 | DERIVED      | <derived4> | ALL    | NULL                | NULL    | 
NULL    | NULL                                     |  83357 | Using temporary; 
Using filesort              |
|    4 | DERIVED      | Job        | range  | PRIMARY             | PRIMARY | 4 
      | NULL                                     |      4 | Using where         
                         |
|    4 | DERIVED      | File       | ref    | JobId,JobId_2       | JobId_2 | 4 
      | bacula.Job.JobId                         |  20839 | Using index         
                         |
|    5 | UNION        | BaseFiles  | ALL    | basefiles_jobid_idx | NULL    | 
NULL    | NULL                                     |      1 | Using where       
                           |
|    5 | UNION        | Job        | eq_ref | PRIMARY             | PRIMARY | 4 
      | bacula.BaseFiles.BaseJobId               |      1 |                     
                         |
|    5 | UNION        | File       | eq_ref | PRIMARY             | PRIMARY | 8 
      | bacula.BaseFiles.FileId                  |      1 |                     
                         |
| NULL | UNION RESULT | <union4,5> | ALL    | NULL                | NULL    | 
NULL    | NULL                                     |   NULL |                   
                           |
+------+--------------+------------+--------+---------------------+---------+---------+------------------------------------------+--------+----------------------------------------------+
13 rows in set (0.00 sec)


Best regards
Ulrich


Ulrich Leodolter <ulrich.leodol...@obvsg.at>
Oesterreichische Bibliothekenverbund und Service GmbH
Raimundgasse 1/3, A-1020 Wien
Fax +43 1 4035158-30
Tel +43 1 4035158-21
Web http://www.obvsg.at

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Bacula-devel mailing list
Bacula-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to