scripts/collector/mysql/sql/database_details.sql (165 lines of code) (raw):

/* Copyright 2024 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ select /*+ MAX_EXECUTION_TIME(5000) */ concat(char(34), @PKEY, char(34)) as pkey, concat(char(34), @DMA_SOURCE_ID, char(34)) as dma_source_id, concat(char(34), @DMA_MANUAL_ID, char(34)) as dma_manual_id, concat(char(34), src.table_schema, char(34)) as table_schema, src.total_table_count as total_table_count, src.innodb_table_count as innodb_table_count, src.non_innodb_table_count as non_innodb_table_count, src.total_row_count as total_row_count, src.innodb_table_row_count as innodb_table_row_count, src.non_innodb_table_row_count as non_innodb_table_row_count, src.total_data_size_bytes as total_data_size_bytes, src.innodb_data_size_bytes as innodb_data_size_bytes, src.non_innodb_data_size_bytes as non_innodb_data_size_bytes, src.total_index_size_bytes as total_index_size_bytes, src.innodb_index_size_bytes as innodb_index_size_bytes, src.non_innodb_index_size_bytes as non_innodb_index_size_bytes, src.total_size_bytes as total_size_bytes, src.innodb_total_size_bytes as innodb_total_size_bytes, src.non_innodb_total_size_bytes as non_innodb_total_size_bytes, src.total_index_count as total_index_count, src.innodb_index_count as innodb_index_count, src.non_innodb_index_count as non_innodb_index_count from ( select table_schema, count(table_name) as total_table_count, sum(if(upper(table_engine) = 'INNODB', 1, 0)) as innodb_table_count, sum(if(upper(table_engine) != 'INNODB', 1, 0)) as non_innodb_table_count, sum(table_rows) as total_row_count, sum( if(upper(table_engine) = 'INNODB', table_rows, 0) ) as innodb_table_row_count, sum( if(upper(table_engine) != 'INNODB', table_rows, 0) ) as non_innodb_table_row_count, sum(data_length) as total_data_size_bytes, sum( if(upper(table_engine) = 'INNODB', data_length, 0) ) as innodb_data_size_bytes, sum( if(upper(table_engine) != 'INNODB', data_length, 0) ) as non_innodb_data_size_bytes, sum(index_length) as total_index_size_bytes, sum( if(upper(table_engine) = 'INNODB', index_length, 0) ) as innodb_index_size_bytes, sum( if(upper(table_engine) != 'INNODB', index_length, 0) ) as non_innodb_index_size_bytes, sum(total_length) as total_size_bytes, sum( if( upper(table_engine) = 'INNODB', total_length, 0 ) ) as innodb_total_size_bytes, sum( if( upper(table_engine) != 'INNODB', total_length, 0 ) ) as non_innodb_total_size_bytes, sum(index_count) as total_index_count, sum( if(upper(table_engine) = 'INNODB', index_count, 0) ) as innodb_index_count, sum( if(upper(table_engine) != 'INNODB', index_count, 0) ) as non_innodb_index_count from ( select t.table_schema as table_schema, t.table_name as table_name, t.table_rows as table_rows, t.DATA_LENGTH as DATA_LENGTH, t.INDEX_LENGTH as INDEX_LENGTH, t.DATA_LENGTH + t.INDEX_LENGTH as total_length, t.ROW_FORMAT as row_format, t.TABLE_TYPE as table_type, t.ENGINE as table_engine, if(pks.table_name is not null, 1, 0) as has_primary_key, if(t.ROW_FORMAT = 'COMPRESSED', 1, 0) as is_compressed, if(pt.PARTITION_METHOD is not null, 1, 0) as is_partitioned, COALESCE(pt.PARTITION_COUNT, 0) as partition_count, COALESCE(idx.index_count, 0) as index_count, COALESCE(idx.fulltext_index_count, 0) as fulltext_index_count, COALESCE(idx.spatial_index_count, 0) as spatial_index_count from information_schema.TABLES t left join ( select TABLE_SCHEMA, TABLE_NAME, PARTITION_METHOD, SUBPARTITION_METHOD, count(1) as PARTITION_COUNT from information_schema.PARTITIONS where table_schema not in ( 'mysql', 'information_schema', 'performance_schema', 'sys' ) group by TABLE_SCHEMA, TABLE_NAME, PARTITION_METHOD, SUBPARTITION_METHOD ) pt on ( t.table_schema = pt.table_schema and t.TABLE_NAME = pt.TABLE_NAME ) left join ( select table_schema, TABLE_NAME from information_schema.statistics where table_schema not in ( 'mysql', 'information_schema', 'performance_schema', 'sys' ) group by table_schema, TABLE_NAME, index_name having SUM( if( non_unique = 0 and NULLABLE != 'YES', 1, 0 ) ) = count(*) ) pks on ( t.table_schema = pks.table_schema and t.TABLE_NAME = pks.TABLE_NAME ) left join ( select s.table_schema, s.table_name, count(1) as index_count, sum( if(s.INDEX_TYPE = 'FULLTEXT', 1, 0) ) as fulltext_index_count, sum(if(s.INDEX_TYPE = 'SPATIAL', 1, 0)) as spatial_index_count from information_schema.STATISTICS s where s.table_schema not in ( 'mysql', 'information_schema', 'performance_schema', 'sys' ) group by s.table_schema, s.table_name ) idx on ( t.table_schema = idx.table_schema and t.TABLE_NAME = idx.TABLE_NAME ) where t.table_schema not in ( 'mysql', 'information_schema', 'performance_schema', 'sys' ) ) user_tables group by table_schema ) src;