Quick Table Size Analysis (qtblsize.sql)
What This Script Does
Section titled “What This Script Does”This script provides a quick and accurate analysis of table size by counting actual rows and determining the number of distinct blocks containing data using ROWID analysis. Unlike statistics-based approaches, this script provides real-time, accurate measurements by scanning the table directly. It’s particularly useful when table statistics are stale or when you need immediate, precise size information for capacity planning or performance analysis.
The Script
Section titled “The Script”rem qtblsize.sqlremttitle 'Table Size'remcol table_name format a30 heading 'TABLE NAME'col row_count format 999,999,990 heading 'TOTAL ROWS'col block_count format 99,999,990 heading 'HOME BLOCKS'remselect upper('&&table') table_name, count(*) row_count, count( distinct substr(rowid,1,8) || substr(rowid,15,4) ) block_count from &table;remundefine tableKey Features
Section titled “Key Features”- Real-Time Accuracy: Provides current actual counts, not statistical estimates
- Block Usage Analysis: Shows actual blocks containing data using ROWID parsing
- Fast Execution: Simple query design for quick results
- No Statistics Dependency: Works regardless of statistics currency
- Immediate Results: Provides instant size assessment
- ROWID-Based Analysis: Uses Oracle’s ROWID structure for precise block counting
@qtblsize.sqlInput Parameters:
- table: Table name to analyze (will be prompted twice due to && usage)
Required Privileges
Section titled “Required Privileges”SELECT on the target tableSample Output
Section titled “Sample Output” Table Size
TABLE NAME TOTAL ROWS HOME BLOCKS------------------------------ ---------- -----------EMPLOYEES 107,234 12,456Understanding ROWID-Based Analysis
Section titled “Understanding ROWID-Based Analysis”ROWID Structure Analysis
Section titled “ROWID Structure Analysis”ROWID Components
Section titled “ROWID Components”-- ROWID structure (Oracle format):-- OOOOOOFFFBBBBBBRRR-- OOOOOO: Object ID (6 characters)-- FFF: File number (3 characters)-- BBBBBB: Block number (6 characters)-- RRR: Row number within block (3 characters)Block Identification Method
Section titled “Block Identification Method”-- Block identification logic:-- substr(rowid,1,8): Object ID + File number-- substr(rowid,15,4): Block number (partial)-- Combination uniquely identifies each block-- COUNT DISTINCT gives actual blocks with dataAccuracy Benefits
Section titled “Accuracy Benefits”Real-Time Data
Section titled “Real-Time Data”-- Advantages over statistics:-- Always current and accurate-- No dependency on ANALYZE operations-- Reflects immediate table state-- Useful when statistics are staleActual vs. Estimated Counts
Section titled “Actual vs. Estimated Counts”-- Comparison with other methods:-- DBA_TABLES.NUM_ROWS: Statistical estimate-- COUNT(*): Accurate row count but no block info-- This script: Both accurate row and block counts-- Direct table scan: Most reliable data sourceCommon Use Cases
Section titled “Common Use Cases”-
Immediate Size Assessment
- Quick table size verification
- Validate growth or shrinkage
- Support immediate capacity decisions
- Verify data load results
-
Statistics Validation
- Compare with DBA_TABLES statistics
- Identify stale statistics
- Validate ANALYZE results
- Support statistics maintenance
-
Performance Analysis
- Assess table scan implications
- Understand storage efficiency
- Support query optimization decisions
- Plan index strategies
-
Capacity Planning
- Accurate size for growth projections
- Storage requirement calculations
- Backup and recovery planning
- Migration size planning
Advanced Analysis
Section titled “Advanced Analysis”Storage Efficiency Assessment
Section titled “Storage Efficiency Assessment”Row Density Calculation
Section titled “Row Density Calculation”-- Calculate rows per block:-- Average rows per block = TOTAL_ROWS / HOME_BLOCKS-- High density: Efficient storage utilization-- Low density: Potential space waste or chaining-- Optimal density depends on row size and updatesBlock Utilization Analysis
Section titled “Block Utilization Analysis”-- Block usage patterns:-- Full blocks: Maximum efficiency-- Partially filled blocks: Growth capacity or waste-- Empty blocks: Not counted (only blocks with data)-- Fragmentation assessment opportunityComparison with Statistics
Section titled “Comparison with Statistics”Statistics Accuracy Validation
Section titled “Statistics Accuracy Validation”-- Compare with DBA_TABLES:SELECT table_name, num_rows, blocksFROM dba_tablesWHERE table_name = 'YOUR_TABLE' AND owner = 'YOUR_SCHEMA';
-- Accuracy indicators:-- Large differences suggest stale statistics-- Similar values indicate recent ANALYZE-- Block count differences show allocation vs. usageStatistics Update Planning
Section titled “Statistics Update Planning”-- When to update statistics:-- Significant row count changes (>10%)-- Block count discrepancies-- Performance plan changes-- Regular maintenance schedulesPerformance Considerations
Section titled “Performance Considerations”Execution Impact
Section titled “Execution Impact”Resource Usage
Section titled “Resource Usage”-- Script execution characteristics:-- Full table scan required-- CPU intensive for large tables-- I/O intensive operation-- May affect concurrent operationsExecution Time Factors
Section titled “Execution Time Factors”-- Factors affecting execution time:-- Table size (rows and blocks)-- System I/O capacity-- Buffer cache hit ratio-- Concurrent database activityOptimization Strategies
Section titled “Optimization Strategies”Timing Considerations
Section titled “Timing Considerations”-- Optimal execution timing:-- During low-activity periods-- When accurate counts are essential-- Before major decisions-- As part of planned maintenanceAlternative Approaches
Section titled “Alternative Approaches”-- For very large tables consider:-- Sampling methods for estimates-- Parallel query execution-- Statistics-based estimates when acceptable-- Scheduled background executionIntegration with Monitoring
Section titled “Integration with Monitoring”Size Tracking
Section titled “Size Tracking”Growth Monitoring
Section titled “Growth Monitoring”-- Track size changes:-- Regular execution for trending-- Compare with previous measurements-- Identify growth patterns-- Plan capacity requirementsBaseline Establishment
Section titled “Baseline Establishment”-- Size baselines:-- Record current accurate sizes-- Establish normal growth rates-- Document seasonal variations-- Support capacity planningAlert Integration
Section titled “Alert Integration”Size-Based Alerts
Section titled “Size-Based Alerts”-- Alert criteria:-- Unexpected size changes-- Rapid growth patterns-- Size threshold breaches-- Capacity limit approachesMonitoring Automation
Section titled “Monitoring Automation”-- Automated monitoring:-- Scheduled size checks-- Automated comparison with thresholds-- Integration with monitoring tools-- Dashboard size displaysBest Practices
Section titled “Best Practices”Usage Guidelines
Section titled “Usage Guidelines”When to Use This Script
Section titled “When to Use This Script”-- Appropriate scenarios:-- Statistics are known to be stale-- Immediate accurate count needed-- Validating data load results-- Small to medium-sized tables-- Critical capacity decisionsWhen to Avoid
Section titled “When to Avoid”-- Inappropriate scenarios:-- Very large tables (>millions of rows)-- Production peak hours-- When estimates are sufficient-- Frequent routine monitoringExecution Strategy
Section titled “Execution Strategy”Performance Planning
Section titled “Performance Planning”-- Execution planning:-- Schedule during low-activity periods-- Consider parallel execution for large tables-- Monitor system impact during execution-- Plan for execution time requirementsResult Documentation
Section titled “Result Documentation”-- Document results:-- Record execution timestamp-- Save results for trending-- Compare with previous measurements-- Update capacity planning documentsTroubleshooting Applications
Section titled “Troubleshooting Applications”Size Discrepancies
Section titled “Size Discrepancies”Statistics vs. Actual Investigation
Section titled “Statistics vs. Actual Investigation”-- Investigate discrepancies:-- Large differences indicate stale statistics-- Recent DML activity impact-- Analyze vs. actual execution timing-- Statistics gathering configuration issuesGrowth Pattern Analysis
Section titled “Growth Pattern Analysis”-- Unexpected growth investigation:-- Application changes causing growth-- Data retention policy effectiveness-- Bulk operation impacts-- Archiving and purging effectivenessPerformance Issues
Section titled “Performance Issues”Long Execution Times
Section titled “Long Execution Times”-- Address performance issues:-- System resource contention-- Large table scan requirements-- I/O subsystem limitations-- Consider alternative approachesResource Impact
Section titled “Resource Impact”-- Minimize resource impact:-- Execute during maintenance windows-- Monitor concurrent operation effects-- Consider parallel execution-- Plan for completion timeRelated Scripts
Section titled “Related Scripts”- dstattr.sql - Table statistics report
- dstatbig.sql - Large table statistics
- dtable.sql - Comprehensive table analysis
- dobject.sql - Database object analysis
Extended Analysis
Section titled “Extended Analysis”Enhanced Version with Additional Metrics
Section titled “Enhanced Version with Additional Metrics”Extended Analysis Query
Section titled “Extended Analysis Query”-- Enhanced version with more details:SELECT '&table' as table_name, COUNT(*) as total_rows, COUNT(DISTINCT substr(rowid,1,8) || substr(rowid,15,4)) as home_blocks, ROUND(COUNT(*) / COUNT(DISTINCT substr(rowid,1,8) || substr(rowid,15,4)), 2) as avg_rows_per_block, MIN(rowid) as first_rowid, MAX(rowid) as last_rowidFROM &table;Storage Efficiency Calculation
Section titled “Storage Efficiency Calculation”-- Calculate storage efficiency:-- Compare blocks used vs. blocks allocated-- Assess row packing density-- Evaluate growth capacity-- Plan optimization opportunitiesSecurity Considerations
Section titled “Security Considerations”Access Requirements
Section titled “Access Requirements”Privilege Management
Section titled “Privilege Management”-- Required privileges:-- SELECT privilege on target table-- Access to schema containing table-- Consider data sensitivity-- Audit access when appropriateData Exposure
Section titled “Data Exposure”-- Security considerations:-- Script doesn't expose actual data-- Only counts and block information-- Consider row count sensitivity-- Implement access controls as neededSummary
Section titled “Summary”This script is essential for:
- Immediate Size Assessment - Providing real-time, accurate table size information
- Statistics Validation - Comparing actual counts with statistical estimates
- Performance Analysis - Understanding table storage characteristics for optimization
- Capacity Planning - Supporting accurate capacity planning with precise size data
- Data Validation - Verifying data load results and table growth patterns