数据库概述
2024年5月24日大约 2 分钟
数据库事务隔离级别
| 隔离级别 | 相关数据库 | 描述 | 问题 | 问题说明 |
|---|---|---|---|---|
| 读未提交 Read uncommitted | - | 一个事务可以读取另一个未提交事务的数据 | 脏读 | 读取到其他事务未提交的数据 |
| 读已提交 Read committed | SQL Server、Oracle | 只能读到已经提交了的内容 | 不可重复读 | 多次读同一数据,由于其他事务在此期间,对数据修改并提交,导致两次读取数据不一致 |
| 可重复读 Repeatable read | MySql | 读取一条记录,事务未提交之前不允许其他线程修改这条数据 | 幻读 | 对于查询一个结果集,先后记录数不同 |
| 串行化 Serializable | - | 事务一个一个按顺序执行,隔离级别最高 | 无 | 性能开销最大,基本没人用 |
性能测试
安装 sysbench
sysbench 是一个基于 LuaJIT(Lua 编程语言的即时编译器(JIT))的可脚本多线程基准测试工具,可用于测试系统 CPU、内存、文件 IO、数据库等等性能;
Ubuntu/Debiansudo apt-get install sysbenchCentOS/RHELsudo yum install sysbenchmacOS(使用 Homebrew)brew install sysbench
测试 MySQL 性能
建立测试表
确保数据库中存在一个名为 test 的库,并运行以下指令,可在数据库中建立 20 张表,每张表 10000 条测试数据;
sysbench --db-driver=mysql \ --time=300 --threads=10 --report-interval=1 \ --mysql-host=127.0.0.1 \ --mysql-port=3306 --mysql-user=root --mysql-password=root \ --mysql-db=test --tables=20 --table_size=10000 \ oltp_read_write --db-ps-mode=disable prepare性能测试
sysbench --db-driver=mysql \ --time=300 --threads=10 --report-interval=1 \ --mysql-host=127.0.0.1 \ --mysql-port=3306 --mysql-user=root --mysql-password=root \ --mysql-db=test --tables=20 --table_size=10000 \ oltp_read_write --db-ps-mode=disable run

