tables->links() => self::LINK_TEXT_COLUMNS, $this->tables->uses() => self::USE_TEXT_COLUMNS, $this->tables->fixes() => self::FIX_TEXT_COLUMNS, ); $size_bytes = $this->estimated_size_bytes( $text_columns_by_table ); return array( 'response_ms' => $this->database_health->response_ms(), 'pause_at_ms' => $settings->pause_at_ms, 'size_bytes' => $size_bytes, 'tables' => count( $text_columns_by_table ), ); } /** @param array> $text_columns_by_table */ private function estimated_size_bytes( array $text_columns_by_table ): int { $size_bytes = 0; foreach ( $text_columns_by_table as $table => $text_columns ) { $size_bytes += $this->table_size_bytes( $table, $text_columns ); } return $size_bytes; } /** @param list $text_columns */ private function table_size_bytes( string $table, array $text_columns ): int { $column_lengths = array(); foreach ( $text_columns as $column ) { $column_lengths[] = 'COALESCE(LENGTH(' . $column . '), 0)'; } $size = $this->query_runner->value( $this->query_runner->prepare( 'SELECT COUNT(*) * %d + COALESCE(SUM(' . implode( ' + ', $column_lengths ) . '), 0) FROM ' . $table, self::ROW_OVERHEAD_BYTES ) ); return (int) $size; } }