数据库为什么要用事务

数据库为什么要用事务,第1张

所谓事务是用户定义的一个数据库 *** 作序列,这些 *** 作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。

简单举个例子就是你要同时修改数据库中两个不同表的时候,如果它们不是一个事务的话,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,就只有第二个表回到未修改之前的状态,而第一个表已经被修改完毕。

而当你把它们设定为一个事务的时候,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,第一个表和第二个表都要回到未修改的状态!这就是所谓的事务回滚。例如,在将资金从一个帐户转移到另一个帐户的银行应用中,一个帐户将一定的金额贷记到一个数据库表中,同时另一个帐户将相同的金额借记到另一个数据库表中。由于计算机可能会因停电、网络中断等而出现故障,因此有可能更新了一个表中的行,但没有更新另一个表中的行。如果数据库支持事务,则可以将数据库 *** 作组成一个事务,以防止因这些事件而使数据库出现不一致。如果事务中的某个点发生故障,则所有更新都可以回滚到事务开始之前的状态。如果没有发生故障,则通过以完成状态提交事务来完成更新。

在 ADONET 中,可以使用 Connection 和 Transaction 对象来控制事务。可以使用 ConnectionBeginTransaction 启动本地事务。一旦开始一个事务,就可以使用 Command 对象的 Transaction 属性在该事务中登记命令。然后,可以根据事务组件的成功或失败情况,使用 Transaction 对象提交或回滚在数据源中所做的修改。

数据库原理是指数据库系统的基本概念、结构、特点、功能、组成部分等方面的理论知识。数据库是一种存储和管理数据的软件系统,其基本目标是提供数据的安全性、完整性和可靠性。

数据库原理主要包括:

数据库的定义:数据库是一种按照特定规则组织起来的数据集合,可被计算机程序访问和处理。

2 数据库管理系统:数据库管理系统(DBMS)是一种软件系统,用于创建、维护和 *** 作数据库。

3 数据库范式:数据库范式是一种设计规则,用于确保数据库中的数据能够被正确地存储和检索。

4 数据库查询语言:数据库查询语言(SQL)是一种用于 *** 作数据库的标准命令语言。

5 数据库事务:数据库事务是一组相关的数据库 *** 作,在执行过程中,要么全部成功,要么全部失败。

6 数据库索引:数据库索引是一种数据结构,用于加速数据库查询 *** 作。

7 数据库连接:数据库连接是两个或多个数据库之间的逻辑关系,用于实现数据共享和协作。

8 数据库备份与恢复:数据库备份与恢复是指将数据库中的数据复制到其他位置以进行后续恢复 *** 作的过程。

以上是数据库原理的主要内容,掌握这些知识可以帮助我们更好地了解数据库系统的工作原理和运行机制。

回答的有点多请耐心看完。

希望能帮助你还请及时采纳谢谢

1事务的原理

事务就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。MySQL事务处理只支持InnoDB和BDB数据表类型。

1事务的ACID原则

1(Atomicity)原子性: 事务是最小的执行单位,不允许分割。原子性确保动作要么全部完成,要么完全不起作用;

2(Consistency)一致性: 执行事务前后,数据保持一致;

3(Isolation)隔离性: 并发访问数据库时,一个事务不被其他事务所干扰。

4(Durability)持久性: 一个事务被提交之后。对数据库中数据的改变是持久的,即使数据库发生故障。

1缓冲池(Buffer Pool)

Buffer Pool中包含了磁盘中部分数据页的映射。当从数据库读取数据时,会先从Buffer Pool中读取数据,如果Buffer Pool中没有,则从磁盘读取后放入到Buffer Pool中。当向数据库写入数据时,会先写入到Buffer Pool中,Buffer Pool中更新的数据会定期刷新到磁盘中(此过程称为刷脏)。

2日志缓冲区(Log Buffer)

当在MySQL中对InnoDB表进行更改时,这些更改命令首先存储在InnoDB日志缓冲区(Log Buffer)的内存中,然后写入通常称为重做日志(redo logs)的InnoDB日志文件中。

3双写机制缓存(DoubleWrite Buffer)

Doublewrite Buffer是共享表空间的物理文件的 buffer,其大小是2MB是一个一分为二的2MB空间。

刷脏 *** 作开始之时,先进行脏页‘备份’ *** 作将脏页数据写入 Doublewrite Buffer

将Doublewrite Buffer(顺序IO)写入磁盘文件中(共享表空间) 进行刷脏 *** 作

4回滚日志(Undo Log)

Undo Log记录的是逻辑日志记录的是事务过程中每条数据的变化版本和情况

在Innodb 磁盘架构中Undo Log 默认是共享表空间的物理文件的Buffer

在事务异常中断,或者主动(Rollback)回滚的过程中 ,Innodb基于 Undo Log进行数据撤销回滚,保证数据回归至事务开始状态

5重做日志(Redo Log)

Redo Log通常指的是物理日志,记录的是数据页的物理修改并不记录行记录情况。(也就是只记录要做哪些修改,并不记录修改的完成情况) 当数据库宕机重启的时候,会将重做日志中的内容恢复到数据库中。

1原子性

Innodb事务的原子性保证,包含事务的提交机制和事务的回滚机制在Innodb引擎中事务的回滚机制是依托 回滚日志(Undo Log) 进行回滚数据,保证数据回归至事务开始状态

2那么不同的隔离级别,隔离性是如何实现的,为什么不同事物间能够互不干扰? 答案是 锁 和 MVCC。

3持久性

基于事务的提交机制流程有可能出现三种场景

1 数据刷脏正常一切正常提交,Redo Log 循环记录数据成功落盘持久性得以保证

2数据刷脏的过程中出现的系统意外导致页断裂现象 (部分刷脏成功),针对页断裂情况,采用Double write机制进行保证页断裂数据的恢复

3数据未出现页断裂现象,也没有刷脏成功,MySQL通过Redo Log 进行数据的持久化即可

4一致性

从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性

2事务的隔离级别

Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别

脏读: 指一个事务读取了另外一个事务未提交的数据。

不可重复读: 在一个事务内读取表中的某一行数据,多次读取结果不同

虚读(幻读): 是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

2基本语法

-- 使用set语句来改变自动提交模式

SET autocommit = 0; /关闭/

SET autocommit = 1; /开启/

-- 注意:

--- 1MySQL中默认是自动提交

--- 2使用事务时应先关闭自动提交

-- 开始一个事务,标记事务的起始点

START TRANSACTION

-- 提交一个事务给数据库

COMMIT

-- 将事务回滚,数据回到本次事务的初始状态

ROLLBACK

-- 还原MySQL数据库的自动提交

SET autocommit =1;

-- 保存点

SAVEPOINT 保存点名称 -- 设置一个事务保存点

ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点

RELEASE SAVEPOINT 保存点名称 -- 删除保存点

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/

课堂测试题目

A在线买一款价格为500元商品,网上银行转账

A的yhk余额为2000,然后给商家B支付500

商家B一开始的yhk余额为10000

创建数据库shop和创建表account并插入2条数据

/

CREATE DATABASE `shop`CHARACTER SET utf8 COLLATE utf8_general_ci;

USE `shop`;

CREATE TABLE `account` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(32) NOT NULL,

`cash` DECIMAL(9,2) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO account (`name`,`cash`)

VALUES('A',200000),('B',1000000)

-- 转账实现

SET autocommit = 0; -- 关闭自动提交

START TRANSACTION; -- 开始一个事务,标记事务的起始点

UPDATE account SET cash=cash-500 WHERE `name`='A';

UPDATE account SET cash=cash+500 WHERE `name`='B';

COMMIT; -- 提交事务

# rollback;

SET autocommit = 1; -- 恢复自动提交

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

3事务实现方式-MVCC

1什么是MVCC

MVCC是mysql的的多版本并发控制即multi-Version Concurrency Controller,mysql的innodb引擎支持MVVC。MVCC是为了实现事务的隔离性,通过版本号,避免同一数据在不同事务间的竞争,你可以把它当成基于多版本号的一种乐观锁。当然,这种乐观锁只在事务级别为RR(可重复读)和RC(读提交)生效。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突,极大的增加了系统的并发性能。

2MVCC的实现机制

InnoDB在每行数据都增加两个隐藏字段,一个记录创建的版本号,一个记录删除的版本号。

在多版本并发控制中,为了保证数据 *** 作在多线程过程中,保证事务隔离的机制,降低锁竞争的压力,保证较高的并发量。在每开启一个事务时,会生成一个事务的版本号,被 *** 作的数据会生成一条新的数据行(临时),但是在提交前对其他事务是不可见的;对于数据的更新(包括增删改) *** 作成功,会将这个版本号更新到数据的行中;事务提交成功,新的版本号也就更新到了此数据行中。这样保证了每个事务 *** 作的数据,都是互不影响的,也不存在锁的问题。

3MVCC下的CRUD

SELECT:

当隔离级别是REPEATABLE READ时select *** 作,InnoDB每行数据来保证它符合两个条件:

1 事务的版本号 大于等于 创建行版本号

  2 行数据的删除版本 未定义 或者大于 事务版本号

  行创建版本号 事务版本号 行删除版本号

 

INSERT:

InnoDB为这个新行 记录 当前的系统版本号。

DELETE:

InnoDB将当前的系统版本号 设置为 这一行的删除版本号。

UPDATE:

InnoDB会写一个这行数据的新拷贝,这个拷贝的版本为 当前的系统版本号。它同时也会将这个版本号 写到 旧行的删除版本里。

————————————————

版权声明:本文为CSDN博主「@Autowire」的原创文章,遵循CC 40 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:>

NetApp AFF A 系列全闪存阵列是一款智能、至强、至信的解决方案,它可利用现代云技术为您的 Data Fabric 提供所需的速度、效率和安全性。

进行任何 IT 转型的基础性第一步是利用高性能全闪存存储打造现代化基础架构,提高关键业务应用程序的速度和响应能力。数据分析、人工智能 (AI) 和深度学习 (DL) 等全新工作负载需要极致性能,而这是第一代闪存系统无法提供的。此外,采用“云优先”策略还会引发跨数据中心和云端的共享环境对企业级数据服务的需求。您的全闪存阵列必须提供强大的数据服务、集成数据保护、无缝可扩展性和更高水平的性能以及应用程序和云深度集成。

NetApp  AFF A 系列系统由 NetApp  ONTAP  数据管理软件提供支持,可提供行业最高性能、卓越的灵活性和同类最佳数据服务以及云集成,帮助您在混合云中加速提供、管理和保护业务关键型数据。

从大型企业到中型企业的众多组织均依靠 AFF A 系列实现以下目标:

· 在内部和云端利用无缝数据管理简化运营。

· 加快传统和新一代应用程序的运行速度。

· 确保业务关键型数据始终可用、受到保护并且安全无虞。

在现代数据中心,IT 肩负着为业务关键型工作负载提供最大性能,随业务发展无中断扩展,以及帮助业务部门实施全新数据驱动型计划的重任。AFF A 系列系统可以轻松帮您搞定这一切。

AFF A 系列系统可提供经 SPC-1 和 SPEC SFS 行业基准验证的行业领先性能,因此成为 Oracle、Microsoft SQL Server、MongoDB 数据库、VDI 和服务器虚拟化等要求严苛的高事务性应用程序的理想选择。

借助前端 NVMe/FC 和 NVMe/TCP 主机连接以及后端 NVMe 连接 SSD 的强大功能,我们的高端 AFF A900 系统可将延迟降低至 100 微秒。A900 不仅采用高故障恢复能力设计,还提供高 RAS,并可从其前代 A700 进行无中断机箱内升级。A800 外形紧凑小巧、性能卓越,尤其适合 EDA 以及媒体和 娱乐 工作负载。最多样化的中端 AFF A400 系统采用硬件加速技术,可显著提高性能和存储效率。与前代产品相比,我们的入门级预算友好型 AFF A250 可将性能提高 40%,将效率提高 33%,而且无需额外成本。此外,AFF A 系列还可让您:

· 利用对称双活主机连接加快任务关键型 SAN 工作负载的处理速度,以实现持续可用性和即时故障转移。

· 整合工作负载,在具有真正统一横向扩展架构的集群中以 1 毫秒延迟提供高达 1440 万次 IOPS。内置自适应服务质量 (QoS) 功能可确保满足多重工作负载和多租户环境中的 SLA 要求。

· 使用单一命名空间管理可大规模扩展的 NAS 容器(容量高达 20 PB 并容纳 4000 亿个文件)。

· 借助 NetApp FlexCache 软件提高多个位置之间的协作速度和效率,并增加读取密集型应用程序的数据吞吐量。

AFF A 系列全闪存系统可提供行业领先的性能、密度、可扩展性、安全性和网络连接。作为首款同时支持 NVMe/TCP 和 NVMe/FC 的企业级存储系统,AFF A 系列系统可通过现代网络连接提升性能。使用 NVMe/TCP(使用常用以太网基础架构),您无需投资新硬件即可利用速度更快的主机连接。与传统 FC 相比,借助 NVMe/FC,您可以获得两倍的 IOPS,并将应用程序响应时间缩短一半。这些系统具备存储路径故障转移功能,支持包括 VMware、Microsoft Windows 10 和 Linux 在内的广泛生态系统。对大多数客户而言,将 NVMe/FC 集成到现有 SAN 是一个简单的无中断软件升级过程。

借助 AFF A 系列,您可以无中断地将新技术和私有云或公有云集成到您的基础架构中。AFF A 系列是支持您将不同控制器、不同大小 SSD 和新技术相结合,从而有效保护您的投资的唯一全闪存阵列。基于 NVMe 的 AFF 系统还支持 SAS SSD,最大限度地提高了升级的灵活性和成本效益。

IT 部门都在尽力让预算发挥更大作用,助力 IT 员工集中精力开展新的增值项目,而不是把时间浪费在日常 IT 管理上。AFF 系统可简化 IT 运营,从而降低数据中心成本。特别是,我们的入门级系统 AFF A250 可为中型企业客户提供同类最佳的性能和效率,使他们能够整合更多工作负载并消除孤岛。

NetApp AFF 系统为企业级应用程序、虚拟桌面基础架构 (VDI)、数据库和服务器虚拟化提供广泛的应用程序生态系统支持和深度集成,支持对象包括 Oracle、Microsoft SQL Server、VMware、SAP、MySQL 等。您可以利用 NetApp ONTAP System Manager 在 10 分钟内快速配置存储。此外,基础架构管理工具可简化并自动化执行常见存储任务,因此您可以:

· 通过监控集群和节点轻松配置并重新平衡工作负载。

· 使用一键式自动化和自助服务进行配置和数据保护。

· 只需单击一下即可升级 *** 作系统和固件

· 将 LUN 从第三方存储阵列直接导入到 AFF 系统,实现数据无缝迁移。

此外,NetApp  Active IQ  数字顾问引擎支持您利用预测性分析和主动式支持优化您的 NetApp 系统。在 NetApp 庞大客户群的驱动下,AI 和机器学习得出具有指导意义的见解,帮助您防止问题、优化配置、节省时间并做出更明智的决策。

NetApp 采用各种功能来优化容量,促进节省,助您降低总体拥有成本。AFF A 系列系统支持采用多流写入技术的固态驱动器 (SSD),与高级 SSD 分区功能相结合,无论您存储何种类型的数据,均能提供最大可用容量。精简配置、NetApp Snapshot 副本以及重复数据删除、数据压缩和数据缩减等实时数据精简功能,可节省大量额外的空间且丝毫不会影响性能,让您购买尽可能少的存储容量。

NetApp 构建的 Data Fabric 可帮助您简化并集成云和内部环境之间的数据管理,满足业务需求并获得竞争优势。借助 AFF A 系列,您可以连接到更多云,在获得更多数据服务的同时,实现数据分层、缓存和灾难恢复等目的。此外,您还可以:

· 通过使用 FabricPool 将冷数据自动分层到云,最大限度地提高性能并降低总体存储成本。

· 即时交付数据,以支持在混合云中高效协作

· 通过在内部环境和公有云中利用 Amazon Simple Storage Service (Amazon S3) 云资源来保护您的数据。

· 提高在整个企业内部和混合云部署之间广泛共享的数据的读取性能。

企业的发展越来越依赖数据,因此数据丢失对业务的影响可能会越来越大,而且成本高昂。IT 必须保护数据免遭内部和外部威胁,确保数据可用性,避免维护过程中发生中断,并从故障中快速恢复。

AFF A 系列系统附带提供一整套备受赞誉的 NetApp 应用程序一致的集成数据保护软件。主要功能包括:

· 利用克隆和 Snapshot 副本节省本机空间,从而降低存储成本并最大限度地减少对性能的影响。支持多达 1,023 个副本。

· NetApp  SnapCenter 软件提供应用程序一致的数据保护和克隆管理,可简化应用程序管理。

· 使用 NetApp  SnapMirror 技术,可将数据复制到内部或云端的任何 NetApp FAS 或 AFF 系统,从而降低整体系统成本。

借助 AFF,您可以实现零数据丢失和零停机,确保数据始终可用。NetApp MetroCluster 软件可提供同步复制功能来保护整个系统,而 NetApp SnapMirror 业务连续性功能则可提供更灵活、更经济高效的业务连续性,即使在对所选关键数据进行更精细的复制时也是如此。

灵活的加密和密钥管理可帮助您保护内部环境、云中和传输中的敏感数据。市场领先的防勒索软件保护功能既适用于抢占,也适用于攻击后恢复,可保护您的关键数据免受勒索软件攻击,并防止灾难性的财务后果。借助这些简单高效的安全解决方案,您可以:

· 使用自加密驱动器和基于软件加密的任何类型驱动器实现 FIPS 140-2 合规性(1 级和 2 级)。

· 利用安全清除、日志记录与审计监控以及一次写入,多次读取 (WORM) 文件锁定等安全功能满足监管、风险和合规性要求。

· 利用多因素身份验证、基于角色的访问控制、安全多租户和存储级文件安全性抵御威胁。

如需了解更多信息,请留下评论。

ACID,指数据库事务正确执行的四个基本要素的缩写包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transactionprocessing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求

原子性

整个事务中的所有 *** 作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性

在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

隔离性

两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

持久性

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

具体来说,本文包括以下内容:

事务

查询性能

用户和查询冲突

容量

配置

NoSQL 数据库

事务

事务可以观察真实用户的行为:能够在应用交互时捕获实时性能。众所周知,测量事务的性能包括获取整个事务的响应时间和组成事务的各个部分的响应时间。通常我们可以用这些响应时间与满足事务需求的基线对比,来确定当前事务是否处于正常状态。

如果你只想衡量应用的某个方面,那么可以评估事务的行为。所以,尽管容器指标能够提供更丰富的信息,并且帮助你决定何时对当前环境进行自动测量,但你的事务就足以确定应用性能。无需向应用程序服务器获取 CPU 的使用情况,你更应该关心用户是否完成了事务,以及该事务是否得到了优化。

补充一个小知识点,事务是由入口点决定的,通过该入口点可以启动事务与应用进行交互。

一旦定义了事务,会在整个应用生态系统中对其性能进行测量,并将每个事务与基线进行比对。例如,我们可能会决定当事务的响应时间与基线相比,一旦慢于平均响应时间的两个标准差是否就应该判定为异常,如图1所示。

图1-基于基线评估当前事务响应时间

用于评估事务的基线与正在进行的事务活动在时间上是一致的,但事务会由每个事务执行来完善。例如,当你选定一个基线,在当前事务结束之后,将事务与平均响应时间按每天的小时数和每周的天数进行对比,所有在那段时间内执行的事务都将会被纳入下周的基线中。通过这种机制,应用程序可以随时间而变化,而无需每次都重建原始基线;你可以将其看作是一个随时间移动的窗口。

总之,事务最能反映用户体验的测量方法,所以也是衡量性能状况最重要的指标。

查询性能 

最容易检测到查询性能是否正常的指标就是查询本身。由查询引起的问题可能会导致时间太长而无法识别所需数据或返回数据。所以不妨在查询中排查以下问题。

1 选择过多冗余数据

编写查询语句来返回适当的数据是远远不够的,很可能你的查询语句会返回太多列,从而导致选择行和检索数据变得异常缓慢。所以,最好是列出所需的列,而不是直接用 SELECT。当需要在特定字段中查询时,该计划可能会确定一个覆盖索引从而加快结果返回。覆盖索引通常会包含查询中使用的所有字段。这意味着数据库可以仅从索引中产生结果,而不需要通过底层表来构建。

另外,列出结果中所需的列不仅可以减少传输的数据,还能进一步提高性能。

2 表之间的低效联接

联接会导致数据库将多组数据带到内存中进行比较,这会产生多个数据库读取和大量 CPU。根据表的索引,联接还可能需要扫描两个表的所有行。如果写不好两个大型表之间的联接,就需要对每个表进行完整扫描,这样的计算量将会非常大。其他会拖慢联接的因素包括联接列之间存在不同的数据类型、需要转换或加入包含 LIKE 的条件,这样就会阻止使用索引。另外,还需注意避免使用全外联接;在恰当的时候使用内部联接只返回所需数据。

3 索引过多或过少

如果查询优化没有可用的索引时,数据库会重新扫描表来产生查询结果,这个过程会生成大量的磁盘输入/输出(I/O)。适当的索引可以减少排序结果的需要。虽然非唯一值的索引在生成结果时,不能像唯一索引那样方便。如果键越大,索引也会变大,并通过它们创建更多的磁盘 I/O。大多数索引是为了提高数据检索的性能,但也需要明白索引本身也会影响数据的插入和更新,因为所有相关联的指标都必须更新。

4 太多的SQL导致争用解析资源

任何 SQL 查询在执行之前都必须被解析,在生成执行计划之前需要对语法和权限进行检查。由于解析非常耗时,数据库会保存已解析的 SQL 来重复利用,从而减少解析的耗时。因为 WHERE 语句不同,所以使用文本值的查询语句不能被共享。这将导致每个查询都会被解析并添加到共享池中,由于池的空间有限,一些已保存的查询会被舍弃。当这些查询再次出现时,则需要重新解析。

用户和查询冲突 

数据库支持多用户,但多用户活动也可能造成冲突。

1 由慢查询导致的页/行锁定

为了确保查询产生精确的结果,数据库必须锁定表以防止在运行读取查询时再发生其他的插入和更新行为。如果报告或查询相当缓慢,需要修改值的用户可能需要等待至更新完成。锁提示能帮助数据库使用最小破坏性的锁。从事务数据库中分离报表也是一种可靠的解决方法。

2 事务锁和死锁

当两个事务被阻塞时会出现死锁,因为每一个都需要使用被另一个占用的资源。当出现一个普通锁时,事务会被阻塞直到资源被释放。但却没有解决死锁的方案。数据库会监控死锁并选择终止其中一个事务,释放资源并允许该事务继续进行,而另一个事务则回滚。

3 批处理 *** 作造成资源争夺

批处理过程通常会执行批量 *** 作,如大量的数据加载或生成复杂的分析报告。这些 *** 作是资源密集型的,但可能影响在线用户的访问应用的性能。针对此问题最好的解决办法是确保批处理在系统使用率较低时运行,比如晚上,或用单独的数据库进行事务处理和分析报告。

容量 

并不是所有的数据库性能问题都是数据库问题。有些问题也是硬件不合适造成的。

1 CPU 不足或 CPU 速度太慢

更多 CPU 可以分担服务器负载,进一步提高性能。数据库的性能不仅是数据库的原因,还受到服务器上运行其他进程的影响。因此,对数据库负载及使用进行审查也是必不可少的。由于 CPU 的利用率时时在变,在低使用率、平均使用率和峰值使用率的时间段分别检查该指标可以更好地评估增加额外的 CPU 资源是否有益。

2 IOPS 不足的慢磁盘

磁盘性能通常以每秒输入/输出 *** 作(IOPS)来计。结合 I/O 大小,该指标可以衡量每秒的磁盘吞吐量是多少兆。同时,吞吐量也受磁盘的延迟影响,比如需要多久才能完成请求,这些指标主要是针对磁盘存储技术而言。传统的硬盘驱动器(HDD)有一个旋转磁盘,通常比固态硬盘(SSD)或闪存更慢。直到近期,SSD 虽然仍比 HDD 贵,但成本已经降了下来,所以在市场上也更具竞争力。

3 全部或错误配置的磁盘

众所周知,数据库会被大量磁盘访问,所以不正确配置的磁盘可能带来严重的性能缺陷。磁盘应该适当分区,将系统数据目录和用户数据日志分开。高度活跃的表应该区分以避免争用,通过在不同磁盘上存放数据库和索引增加并行放置,但不要将 *** 作系统和数据库交换空间放置在同一磁盘上。

4 内存不足

有限或不恰当的物理内存分配会影响数据库性能。通常我们认为可用的内存更多,性能就越好。监控分页和交换,在多个非繁忙磁盘中建立多页面空间,进一步确保分页空间分配足够满足数据库要求;每个数据库供应商也可以在这个问题上提供指导。

5 网速慢

网络速度会影响到如何快速检索数据并返回给终端用户或调用过程。使用宽带连接到远程数据库。在某些情况下,选择 TCP/IP 协议而不是命名管道可显著提高数据库性能。

配置

每个数据库都需设置大量的配置项。通常情况下,默认值可能不足以满足数据库所需的性能。所以,检查所有的参数设置,包括以下问题。

1 缓冲区缓存太小

通过将数据存储在内核内存,缓冲区缓存可以进一步提高性能同时减少磁盘 I/O。当缓存太小时,缓存中的数据会更频繁地刷新。如果它再次被请求,就必须从磁盘重读。除了磁盘读取缓慢之外,还给 I/O 设备增添了负担从而成为瓶颈。除了给缓冲区缓存分配足够的空间,调优 SQL 查询可以帮助其更有效地利用缓冲区缓存。

2 没有查询缓存

查询缓存会存储数据库查询和结果集。当执行相同的查询时,数据会在缓存中被迅速检索,而不需要再次执行查询。数据会更新失效结果,所以查询缓存是唯一有效的静态数据。但在某些情况下,查询缓存却可能成为性能瓶颈。比如当锁定为更新时,巨大的缓存可能导致争用冲突。

3 磁盘上临时表创建导致的 I/O 争用

在执行特定的查询 *** 作时,数据库需要创建临时表,如执行一个 GROUP BY 子句。如果可能,在内存中创建临时表。但是,在某些情况下,在内存中创建临时表并不可行,比如当数据包含 BLOB 或 TEXT 对象时。在这些情况下,会在磁盘上创建临时表。大量的磁盘 I / O 都需要创建临时表、填充记录、从表中选择所需数据并在查询完成后舍弃。为了避免影响性能,临时数据库应该从主数据库中分离出来。重写查询还可以通过创建派生表来减少对临时表的需求。使用派生表直接从另一个 SELECT 语句的结果中选择,允许将数据加到内存中而不是当前磁盘上。

NoSQL 数据库

NoSQL 的优势在于它处理大数据的能力非常迅速。但是在实际使用中,也应该综合参考 NoSQL 的缺点,从而决定是否适合你的用例场景。这就是为什么NoSQL通常被理解为 「不仅仅是 SQL」,说明了 NoSQL 并不总是正确的解决方案,也没必要完全取代 SQL,以下分别列举出五大主要原因。

1 挑剔事务

难以保持 NoSQL 条目的一致性。当访问结构化数据时,它并不能完全确保同一时间对不同表的更改都生效。如果某个过程发生崩溃,表可能会不一致。一致事务的典型代表是复式记账法。相应的信贷必须平衡每个借方,反之亦然。如果双方数据不一致则不能输入。NoSQL 则可能无法保证「收支平衡」。

2 复杂数据库

NoSQL 的支持者往往以高效代码、简单性和 NoSQL 的速度为傲。当数据库任务很简单时,所有这些因素都是优势。但当数据库变得复杂,NoSQL 会开始分解。此时,SQL 则比 NoSQL 更好地处理复杂需求,因为 SQL 已经成熟,有符合行业标准的接口。而每个 NoSQL 设置都有一个唯一的接口。

3 一致联接

当执行 SQL 的联接时,由于系统必须从不同的表中提取数据进行键对齐,所以有一个巨大的开销。而 NoSQL 似乎是一个空想,因为缺乏联接功能。所有的数据都在同一个表的一个地方。当检索数据时,它会同时提取所有的键值对。问题在于这会创建同一数据的多个副本。这些副本也必须更新,而这种情况下,NoSQL 没有功能来确保更新。

4 Schema设计的灵活性

由于 NoSQL 不需要 schema,所以在某些情况下也是独一无二的。在以前的数据库模型中,程序员必须考虑所有需要的列能够扩展,能够适应每行的数据条目。在 NoSQL 下,条目可以有多种字符串或者完全没有。这种灵活性允许程序员迅速增加数据。但是,也可能存在问题,比如当有多个团体在同一项目上工作时,或者新的开发团队接手一个项目时。开发人员能够自由地修改数据库,也可能会不断实现各种各样的密钥对。

5 资源密集型

NoSQL 数据库通常比关系数据库更加资源密集。他们需要更多的 CPU 储备和 RAM 分配。出于这个原因,大多数共享主机公司都不提供 NoSQL。你必须注册一个 VPS 或运行自己的专用服务器。另一方面,SQL 主要是在服务器上运行。初期的工作都很顺利,但随着数据库需求的增加,硬件必须扩大。单个大型服务器比多个小型服务器昂贵得多,价格呈指数增长。所以在这种企业计算场景下,使用 NoSQL 更为划算,例如那些由谷歌和 Facebook 使用的服务器。

事务管理对于一系列数据库 *** 作进行管理。

一个事务包含一个或多个SQL语句,是逻辑管理的工作单元(原子单元)。

一个事务开始于第一次执行的SQL语句,结束于Commit

Rollback

DDL语句。

注意:其中Commit,

Rollback是显示的提交事务,而DDL语句是隐式的提交事务的。DDL语句的 *** 作是没有办法回滚的。

事务处理(TRANSACTION)是由一个或多个SQL语句序列结合在一起所形成的一个逻辑处理单元。事务处理中的每个语句都是完成整个任务的一部分工作,所有的语句组织在一起能够完成某一特定的任务。DBMS在对事务处理中的语句进行处理时,是按照下面的约定来进行的,这就是“事务处理中的所有语句被作为一个原子工作单位,所有的语句既可成功地被执行,也可以没有任何一个语句被执行”。DBMS负责完成这种约定,即使在事务处理中应用程序异常退出,或者是硬件出现故障等各种意外情况下,也是如此。在任何意外情况下,DBMS都负责确保在系统恢复正常后,数据库内容决不会出现“部分事务处理中的语句被执行完”的情况。

以上就是关于数据库为什么要用事务全部的内容,包括:数据库为什么要用事务、数据库原理、数据库的事务机制是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9343243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存