As I understand, Data Dictionary
- Is a collection of tables, part of SYS schema (if not the whole SYS schema)
- It is stored as 'regular' tables, so whatever is applied to database tables, also applies to data dictionary (e.g. indexes, statistics)
- Its statistics should be updated
- It is always cached
Can the the size and the complexity of oracle data dictionary affect the database performance?
When I add a new object on my database a new (or multiple) entries is/are added on data dictionary. A scenario I can think of has to do with partitioning. So if I have a table which have a partition and subpartitions, I will have an entry for the table, an entry for each partition and an entry of each partition subpartitions in data dictionary. Those entries are spawned among different 'tables'. Imagine know having tables with thousands of partitions and hundreds of subpartition. Again this number of records may not be something that a dbms can handle, but how it will affect its performance as it grows?
Note: I have read a lot of discussion on if and how partitioning affects performance in general. This is out of scope for this question. Partitioning is just an example I gave, to show how data dictionary volume can grow.
SYSTEM
tablespace. Typically this is less than 1 GB. With nowadays RAM it should be no problem to put them all into memory.select tablespace_name, sum(bytes)/1024/1024 as size_in_mb from dba_data_files where tablespace_name = 'SYSTEM' group by tablespace_name
. If this is correct my SYS schema is more than 3GB in my testing environment.select round(sum(bytes)/1024/1024) usedspace from dba_segments where tablespace_name='SYSTEM'
) or free (select round(sum(bytes)/1024/1024 ) as free_space from dba_free_space where tablespace_name='SYSTEM'
)