当前位置: 首页 > news >正文

DeepSeek总结的数据库性能教学文章

原文地址:https://bgithub.xyz/DBatUTuebingen-Teaching/didi-ws2526

数据库查询性能的演进:从脚本到并行优化

作者:Torsten Grust
时间:2025/26年冬季学期
单位:德国图宾根大学


引言:性能工程的起点

数据库管理系统(DBMS)通过充分利用现代计算机架构中的CPU多线程、内存层次结构(DRAM、缓存)及SSD等存储设备,实现了高效的数据处理。即便是最微小的性能优化,在面对数百万行数据处理时,也会产生显著的放大效应。

本文以一个简单的查询任务为切入点,逐步展示从脚本语言到手工优化的C代码,再到现代DBMS(DuckDB)在性能上的巨大差异。该任务为:读取TPC-H基准测试中的lineitem表(约720MB),并对第五列quantity字段求和


一、性能极限:理论下限

在开始优化之前,作者首先测定了硬件的理论性能极限:

  • DRAM读取带宽:21 GB/s→ 理论查询时间:0.03s
  • NVMe SSD:5 GB/s→ 0.14s
  • USB-C SSD:800 MB/s→ 0.90s
  • 以太网:2.5 GB/s→ 0.28s

这些数值是基于I/O带宽的理想情况,忽略了CPU处理开销,作为后续优化的参考上限。


二、逐步优化:从awk到多线程C

1. awk脚本(解释型语言)

awk-F'|''{sum += $5} END {print sum}'lineitem.csv
  • 查询时间:1.60s
  • 吞吐量:471 MB/s
  • 问题:CPU成为瓶颈,即使文件缓存在DRAM中也无济于事。

2. Python(字节码解释)

逐行读取、拆分、类型转换。

  • 查询时间:2.75s
  • 吞吐量:275 MB/s
  • 性能更低,适合快速开发但不适合大规模数据处理。

3. C语言 + getline()

使用标准C库逐行解析。

  • 查询时间:0.50s
  • 吞吐量:1.5 GB/s
  • 性能大幅提升,但getline()和atoi()占用大量CPU(58% + 14%)。

4. C + mmap()

使用mmap()一次性将文件映射到内存,避免逐行系统调用。

  • 冷缓存:1.6s(受限于磁盘I/O)
  • 热缓存:0.42s(吞吐量1.8 GB/s)
  • 问题:逐字节扫描查找换行符\n成为新瓶颈(占53% CPU)。

5. C + mmap + 块级换行搜索

使用64位字块并行查找换行符,利用位运算宏HAS_NL()

  • 查询时间:0.27s
  • 吞吐量:2.8 GB/s
  • 性能与strchr()相当,但代码复杂度显著上升。

6. C + mmap + 多线程

将文件按换行符划分为12个分区,每个线程独立求和。

  • 查询时间:0.04s
  • 吞吐量:18.8 GB/s
  • 逼近DRAM带宽上限,展现了多核并行处理的巨大优势。

三、SQL引擎的极致:DuckDB

作者使用DuckDB对同一数据执行SQL查询:

SELECTsum(l_quantity)FROMread_csv('lineitem.csv');
  • 查询时间:0.448s(首次读取)
  • 将数据导入DuckDB存储格式后:
SELECTsum(l_quantity)FROMlineitem;
  • 查询时间:0.002s
  • CPU总时间:0.007s
  • 吞吐量远超所有手工实现

性能来源分析:

  1. 列式存储:只读取l_quantity列,避免扫描整行。
  2. 投影下推:查询计划仅访问所需字段。
  3. 二进制存储:无需重复解析文本。
  4. 并行执行:自动利用多核。
  5. 内存驻留:数据完全加载于DRAM。

四、总结:性能工程的启示

实现方式查询时间吞吐量
awk1.60s471 MB/s
Python2.75s275 MB/s
C + getline0.50s1.5 GB/s
C + mmap0.27s2.8 GB/s
C + mmap + 线程0.04s18.8 GB/s
DuckDB (SQL)0.002s>20 GB/s

50年过去了,关系模型的查询优化依然是活跃的研究领域。

即使是个人笔记本电脑,也能实现每秒数GB的数据处理能力。现代DBMS的性能并非依赖“大铁器”或集群,而是通过对硬件特性的深度理解和精细的性能工程实现的。

http://www.jsqmd.com/news/376886/

相关文章:

  • Qwen-Ranker Pro在LaTeX学术论文检索系统中的应用
  • Face3D.ai Pro参数详解:建模质量调优指南
  • 5分钟体验CLAP:音频分类控制台快速上手
  • ClearerVoice-Studio与MySQL集成:语音数据存储与分析
  • StructBERT语义搜索:本地化部署与实战应用解析
  • 无需GPU也能用:BGE Reranker-v2-m3 CPU版部署教程
  • Qwen3-TTS语音合成实战:对接RPA流程自动生成多语种外呼语音文件
  • 5步搞定:SiameseUIE中文事件抽取(EE)教程
  • 零基础玩转云容笔谈:手把手教你生成东方美学人像作品
  • Mybatis 执行存储过程(没有返回数据集)
  • 探寻四川钻石全能高基板实力厂商:2026年五大可靠选择解析 - 2026年企业推荐榜
  • 微信小程序调用EasyAnimateV5云函数:移动端视频生成方案
  • mPLUG视觉问答性能实测:对比云端方案的响应速度与精度
  • MogFace实测:高精度检测遮挡/极端姿态人脸效果展示
  • 2026年方管铝型材公司权威推荐:异形铝型材/槽铝型材/氟碳喷涂铝型材/氧化铝型材/铝型材喷涂/铝型材圆管/铝管铝型材/选择指南 - 优质品牌商家
  • Qwen3-Reranker-0.6B实战教程:结合LLM生成Query扩展提升重排效果
  • Service层调用Mapper与Service原则
  • Java开发者指南:Pi0具身智能SDK集成教程
  • Qwen2.5-7B-Instruct部署教程:vLLM启用FlashAttention-2加速实测报告
  • 谷歌搜索结果自营化分析技术
  • 人脸识别新体验:Retinaface+CurricularFace实测分享
  • WuliArt Qwen-Image Turbo镜像免配置:开箱即用的本地文生图生产力工具
  • 2026年铝材铝型材公司权威推荐:开模铝型材/异形铝型材/方管铝型材/槽铝型材/氟碳喷涂铝型材/氧化铝型材/铝型材喷涂/选择指南 - 优质品牌商家
  • 小白必看:ollama上QwQ-32B的快速入门指南
  • 灵毓秀-牧神-造相Z-Turbo模型:新手友好的文生图解决方案
  • DeepSeek-OCR-2快速部署:阿里云/腾讯云GPU服务器一键安装脚本分享
  • DeepSeek-OCR-2惊艳案例:100页产品手册PDF→单个Markdown→VS Code大纲导航
  • 2026年降AI率平台深度横评:算法博弈下,谁才是“去机器味”的最优解? - 品牌观察员小捷
  • QWEN-AUDIO部署教程:NVIDIA驱动/CUDA/PyTorch版本严格匹配指南
  • DeepSeek-R1-Distill-Qwen-7B惊艳效果:Ollama本地运行下自动生成Markdown格式技术方案文档