I have the same issue even without preconditions defined. When upgrading
from version 3.2.2 to 3.3.2, Liquibase suddenly runs a “SHOW FULL
COLUMNS…” query for every table in the database.
To verify the difference, I created a database (MySQL) with 3 tables and
ran liquibase with “updateSQL” on both versions. Below is the
output of the general query log for each run.
With Liquibase 3.2.2:
Connect
root@localhost on test
Query SHOW SESSION
VARIABLES
Query SHOW COLLATION
Query SET
character_set_results = NULL
Query SET
autocommit=1
Query SET
sql_mode='STRICT_TRANS_TABLES’
Query SELECT
USER()
Query SET autocommit=0
Query SELECT
USER()
Query rollback
Query SHOW FULL TABLES FROM
test
LIKE 'databasechangeloglock’
Query select
count() from test.DATABASECHANGELOGLOCK
Query
commit
Query rollback
Query SHOW FULL TABLES FROM
test
LIKE 'databasechangelog’
Query SHOW FULL
TABLES FROM test
LIKE 'databasechangelog’
Query
SHOW FULL COLUMNS FROM databasechangelog
FROM test
LIKE
'%'
Query SELECT MD5SUM FROM test.DATABASECHANGELOG
WHERE MD5SUM IS NOT NULL
Query SHOW FULL TABLES FROM test
LIKE 'databasechangelog’
Query SELECT
FILENAME,AUTHOR,ID,MD5SUM,DATEEXECUTED,ORDEREXECUTED,EXECTYPE,DESCRIPTION,COMMENTS,TAG,LIQUIBASE
FROM test.DATABASECHANGELOG ORDER BY DATEEXECUTED ASC, ORDEREXECUTED
ASC
Query commit
Query SHOW FULL TABLES FROM test
LIKE 'databasechangeloglock’
Query select count()
from test.DATABASECHANGELOGLOCK
Query rollback
Query
SHOW FULL TABLES FROM test
LIKE
'databasechangeloglock’
Query rollback
Query
commit
Query rollback
Query SHOW FULL TABLES FROM
test
LIKE 'databasechangeloglock’
Query
rollback
Query commit
Query rollback
Query
rollback
Query SET autocommit=1
Quit
Liquibase 3.3.2:
Connect
root@localhost on test
Query SHOW SESSION
VARIABLES
Query SHOW COLLATION
Query SET
character_set_results = NULL
Query SET
autocommit=1
Query SET
sql_mode='STRICT_TRANS_TABLES'
Query SELECT
USER()
Query SET autocommit=0
Query SELECT
USER()
Query rollback
Query SHOW FULL TABLES FROM
`test` LIKE 'databasechangeloglock'
Query select
count(*) from test.DATABASECHANGELOGLOCK
Query
commit
Query rollback
Query SHOW FULL TABLES FROM
`test` LIKE 'databasechangelog'
Query SHOW FULL
TABLES FROM `test` LIKE '%'
Query SHOW FULL COLUMNS
FROM `databasechangelog` FROM `test` LIKE '%'
Query
SHOW FULL COLUMNS FROM `databasechangeloglock` FROM `test` LIKE
'%'
Query SHOW FULL COLUMNS FROM `table1` FROM
`test` LIKE '%'
Query SHOW FULL COLUMNS FROM
`table2` FROM `test` LIKE '%'
Query SHOW FULL
COLUMNS FROM `table3` FROM `test` LIKE '%'
Query
SELECT MD5SUM FROM test.DATABASECHANGELOG WHERE MD5SUM IS NOT
NULL
Query SHOW FULL TABLES FROM `test` LIKE
'databasechangelog'
Query SELECT
FILENAME,AUTHOR,ID,MD5SUM,DATEEXECUTED,ORDEREXECUTED,EXECTYPE,DESCRIPTION,COMMENTS,TAG,LIQUIBASE
FROM test.DATABASECHANGELOG ORDER BY DATEEXECUTED ASC, ORDEREXECUTED
ASC
Query commit
Query rollback
Query
rollback
Query commit
Query rollback
Query
rollback
Query SET autocommit=1
Quit
As you see, in the latter example it runs queries like "SHOW
FULL COLUMNS FROM `table1` FROM `test` LIKE '%'" for each
of the tables in the database. And in rainer.spruenkens case, this
will lead to the execution of 26.000 queries...