Self-tuning databases are databases that can manage and maintain themselves by adjusting to different circumstances and preparing resources for varying workloads. They have characteristics like being self-optimizing, self-configuring, self-healing, self-protecting, self-organizing, and self-inspecting. Early work on self-tuning databases focused on automating physical database design and tuning through techniques like hypothetical analysis of alternative designs, self-tuning histograms, and using reflection to enable runtime inspection and adaptation.