Getting rid of the DBA (database administrator) is not what self-tuning tries to achieve. However, helping to reduce maintenance efforts, recommend parameter optimizations, or simply monitor the system for bottleneck detection, are major goals of a self-tuning DBMS. Currently, we are focusing on several areas in our XTC DBMS that allow for autonomous management and building a system model for self-tuning step-by-step.

Auto Indexing

An interesting aspect of self-tuning is to "solve" the NP-complete problem of defining the optimal index configuration for a given or anticipated workload. This problem was often tackled in the relational research community so far. Nevertheless, the same problem is somehow more complex in the XML world due to the different index options available for those hierachical data structures.

The image on the right side shows the autonomous index management components available in XTC.

Dynamic Buffer Adaptation

Over the past years, various buffer algorithms have been developed and are available today. However, exchanging them during runtime has not drawn much attention so far. Another feature is to dynamically resize buffers by meeting a specified upper bound for all buffers. Currently, we are developing a model to estimate buffer configuration changes and predict their impact on IO performance. With the help of our monitoring GUI, we can visualize the current buffer states and their changes.

Autonomous Memory Management

In today's databases, the maximum memory size is often a fixed value. However, distributing the available memory or changing the allocation on-demand needs feedback information on the expected impact. Therefore, lock tables, transactional contexts, sort buffers, container buffers, query contexts, intermediate results, etc., have to be monitored and their implementation must allow to resize them.

The next level of self-tuning memory is to address dynamic environments such as clouds, where even the upper memory bound may be variable. That means, a cost model is necessary to decide whether an increase or decrease of the requested resources pays off in terms of performance gains or penalties.