Oracle--SQL事务操作与管理流程
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除
数据库系统的并发控制以事务为单位进行,通过内部锁定机制限制事务对共享资源的访问,确保数据并行性和一致性。事务是由一系列语句构成的逻辑工作单元,与存储过程等批处理相似,通常用于封装业务逻辑,形成独立的工作单元。
一、事务概述
事务处理多个数据表时,若中途出现错误(如系统死机、断电),数据不会保存。事务结果有两种:出错则全部回滚,撤销所有修改;无错则全部提交。因此,合理使用事务能提升数据安全性和处理效率。
1、事务的属性
事务包含4种重要的属性,即原子性、一致性、隔离性和持久性,被统称为ACID。
1.1、原子性(atomicity)
事务是一个整体的工作单元,事务对数据库所做的操作要么全部执行要么全部取消。如果某条语句执行失败,则所有语句全部回滚。
1.2、一致性(consistency)
事务完成时需确保所有数据一致。在数据库中,事务修改须遵循所有规则以维护数据完整性。事务成功,数据进入新状态;失败,则回滚至初始状态。
1.3、隔离性(isolation)
事务的修改必须与其他事务的修改隔离。事务查看数据时,只能看到另一并发事务修改前或修改后的状态,不会看到中间状态的数据。这是事务的隔离性要求,确保数据一致性和完整性。
1.4、持久性(durability)
当事务提交后,对数据库所作的修改就会永久保存下来
2、事务的状态
- 活动状态:正在执行
- 部分提交状态: 最后一条语句执行完但未完全提交
- 失败状态: 因硬件或逻辑错误需回滚
- 提交状态: 成功写入硬盘并完成
- 终止状态:回滚至初始状态
提交状态和中止状态的事务统称为已决事务,处于活动状态、部分提交状态和失败状态的事务称为未决事务
二、操作事务
在Oracle中,事务隐式自动开始,但结束需要用户操作。事务结束的情况如下:
- 执行COMMIT语句提交事务
- 执行ROLLBACK语句撤销事务
- 执行数据定义语句(如CREATE、DROP、ALTER),成功则自动提交,失败则回滚
- 执行数据控制命令(如GRANT、REVOKE),完成后自动提交
- 正常断开数据库连接或退出SQL*Plus环境会自动提交,非正常断开则回滚
综上,Oracle事务的结束需执行COMMIT或ROLLBACK语句
1、设置事务
1.1、设置只读事务
只读事务仅允许查询操作,禁止执行DML操作,可确保用户获取特定时间点的数据。例如,企业需在每日16时统计最近一天的销售信息,使用只读事务后,用户能确保获取16时前的数据,后续其他会话提交的新数据不会影响该事务的查询结果。
当设置只读事务时,“set transaction read only;”语句必须是事务开始的第一条语句。
使用过程READ ONLY也可以设置只读事务,设置只读事务有如下两种语句:
--第一种语句set transaction read only;--第二种语句exec dbms_transaction.read_only;
1.2、设置读写事务
设置事务为读写事务,是事务的默认方式,将建立回滚信息。将事务设置为读写状态的代码:
set transaction read write
1.3、为事务分配回滚段
在Oracle中,用户可自定义回滚段权限以灵活调整性能。分配原则为:
- 短时查询且不涉及相同数据表的事务,分配小回滚段以节省内存;
- 长时间查询且需读取相同数据表的事务,分配大回滚段避免频繁改写回滚信息;
- 涉及大量数据插入、删除或更新的事务,分配足够大的回滚段以保存事务的回滚信息。
相关代码如下:
set transaction use rollback segment system
2、提交事务(COMMIT语句)
提交事务是指把对数据库进行的全部操作持久性地保存到数据库中,这种操作通常使用COMMIT语句来完成
2.1、提交前的SGA的状态
事务提交前,Oracle SQL语句执行后的SGA内存状态如下:
- 回滚缓冲区:生成回滚记录,包含所有已修改值的旧值,用于事务回滚时恢复数据。
- 日志缓冲区:生成该事务的日志,日志在事务提交前已被写入物理磁盘,确保事务的持久性。
- 数据库缓冲区:数据被修改,但这些修改在事务提交后才会写入物理磁盘,确保数据一致性。
2.2、提交工作
当使用COMMIT语句提交事务时,Oracle系统内部会按以下顺序处理:
- 在回滚段内记录当前事务已提交,并生成一个唯一的系统编号(SCN)来标识该事务。
- 启动后台的日志写入进程(LGWR),将重做日志缓冲区中的事务重做日志信息和事务SCN写入磁盘上的重做日志文件中。
- Oracle服务器开始释放事务处理所使用的系统资源。
- 显示通知,告知用户事务已成功提交完毕。
2.3、提交的方式
事务的提交方式主要有以下三种:
-
显式提交:使用COMMIT命令使当前事务生效。
-
自动提交:在SQL*Plus中执行SET AUTOCOMMIT ON命令,这样每执行一条DML语句就自动提交一次事务。(虽然这种方式在进行DML操作时看似方便,但在实际应用中可能会出现问题。例如,当应用程序需要同时对多张通过外键关联的表进行DML操作时,由于外键约束要求维护引用完整性,操作顺序可能受到限制,这会增加应用程序开发的复杂性和对程序开发人员水平的要求。因此,在Oracle数据库管理系统中,默认设置AUTOCOMMIT为OFF)
-
隐式提交:除了显式提交之外的提交方式,例如发出DDL命令、程序中止和关闭数据库等操作,这些操作会导致事务隐式提交。
3、回滚事务
回滚事务是指撤销对数据库进行的全部操作,Oracle系统内部会执行以下操作:
- 使用回退段中的数据撤销对数据库所做的修改。
- Oracle后台服务进程释放事务所使用的系统资源。
- 显示通知,告知用户事务回退成功。
--示例:在emp表中,首先删除员工编号是7902的记录,然后回滚事务,恢复数据--首先查询该记录select * from emp where empno=7902;--删除该记录delete from emp where empno=7902;--查询emp数据表中是否还存在员工编号为7902的记录select * from emp where empno=7902;--回滚事务rollback;--再次查询可查询到有记录了,删除的数据恢复
事务的回滚可以撤销未提交事务中SQL命令对数据所做的修改
4、设置回退点
回退点(保存点)是在事务中间设定的回滚标记,作用类似于调试程序的中断点。它将事务划分为若干小部分,以便回滚到指定保存点,而不是整个事务,从而提供更大的灵活性。回滚到指定保存点主要完成以下工作:
- 回滚保存点之后的部分事务。
- 删除该保存点之后建立的所有保存点,但保留该保存点以便多次回滚。
- 解除保存点之后对表或行的封锁。
--示例:select * from dept_temp;savepoint sp01; --建立保存点sp01insert into dept_temp values(50,'IT部','上海'); --添加记录savepoint sp02; --建立保存点sp02delete dept_temp where deptno = 10; --删除数据select * from dept_temp;rollback to sp02; --回滚到sp02并查询数据select * from dept_temp;rollback to sp01; --回滚到sp01并查询数据select * from dept_temp;
通过查询结果,可以发现当事务回滚到保存点sp02时,在保存点sp02后所做的操作被撤销
上面介绍的使用ROLLBACK命令回滚事务的方式称为显式回滚 。还有一种回滚方式称为隐式回滚。如果系统在事务执行期间发生错误、死锁和中止等情况,系统将自动完成隐式回滚
学习永无止境,让我们共同进步!!
相关文章:
Oracle--SQL事务操作与管理流程
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 数据库系统的并发控制以事务为单位进行,通过内部锁定机制限制事务对共享资源的访问,确保数据并行性和一致性。事务是由一系列语…...
Qt -对象树
博客主页:【夜泉_ly】 本文专栏:【暂无】 欢迎点赞👍收藏⭐关注❤️ 目录 前言构造QObject::QObjectQObjectPrivate::setParent_helper 析构提醒 #mermaid-svg-FTUpJmKG24FY3dZY {font-family:"trebuchet ms",verdana,arial,sans-s…...
Unity 带碰撞的粒子效果
碰撞效果:粒子接触角色碰撞体弹起,粒子接触地面弹起。 粒子效果:粒子自行加速度下落,并且在接触碰撞体弹起时产生一个小的旋转。 *注意使用此效果时,自行判断是否需要调整碰撞层级。 以下为角色身高为1.7m时&#x…...
扩散模型(Diffusion Models)
扩散模型(Diffusion Models)是近年来在生成式人工智能领域崛起的一种重要方法,尤其在图像、音频和视频生成任务中表现突出。其核心思想是通过逐步添加和去除噪声的过程来学习数据分布,从而生成高质量样本。 核心原理 扩散…...
JSP服务器端表单验证
JSP服务器端表单验证 一、引言 在Web开发中,表单验证是保障数据合法性的重要环节。《Web编程技术》第五次实验要求,详细讲解如何基于JSP内置对象实现服务器端表单验证,包括表单设计、验证逻辑、交互反馈等核心功能。最终实现:输…...
Anaconda、conda和PyCharm在Python开发中各自扮演的角色
Anaconda、conda和PyCharm在Python开发中各自扮演不同角色,它们的核心用处、区别及相互关系如下: 一、Anaconda与conda的用处及区别 1. Anaconda - 定义:Anaconda是一个开源的Python和R语言发行版,专为数据科学、机器学习等场景…...
【数据结构 · 初阶】- 堆的实现
目录 一.初始化 二.插入 三.删除(堆顶、根) 四.整体代码 Heap.h Test.c Heap.c 我们使用顺序结构实现完全二叉树,也就是堆的实现 以前学的数据结构只是单纯的存储数据。堆除了存储数据,还有其他的价值——排序。是一个功能…...
Ubuntu与OpenHarmony OS 5.0显示系统架构比较
1. 总体架构对比 1.1 Ubuntu显示架构 Ubuntu采用传统Linux显示栈架构,自顶向下可分为: 应用层:GNOME桌面环境和应用程序显示服务器层:X11或Wayland图形栈中间层:Mesa, DRM/KMS硬件层:GPU驱动和硬件 1.2 …...
一键配置多用户VNC远程桌面:自动化脚本详解
在当今远程工作盛行的时代,高效且安全地管理多用户远程桌面访问变得至关重要。本文将介绍一个强大的自动化脚本,该脚本能够快速创建用户并配置VNC远程桌面环境,大大简化了系统管理员的工作。 一、背景介绍 在Linux系统中,手动配置VNC服务器通常需要执行多个步骤,包括创建…...
Qt进阶开发:鼠标及键盘事件
文章目录 一、Qt中事件的概念二、Qt中事件处理方式三、重新实现部件的事件处理函数3.1 常用事件处理函数3.2 自定义控件处理鼠标和绘图事件3.3 常用事件处理函数说明四、重写notify()函数五、QApplication对象上安装事件过滤器六、重写event()事件七、在对象上安装事件过滤器八…...
鸿蒙生态新利器:华为ArkUI-X混合开发框架深度解析
鸿蒙生态新利器:华为ArkUI-X混合开发框架深度解析 作者:王老汉 | 鸿蒙生态开发者 | 2025年4月 📢 前言:开发者们的新机遇 各位鸿蒙开发者朋友们,是否还在为多平台开发重复造轮子而苦恼?今天给大家介绍一位…...
VSCode 用于JAVA开发的环境配置,JDK为1.8版本时的配置
插件安装 JAVA开发在VSCode中,需要安装JAVA的必要开发。当前安装只需要安装 “Language Support for Java(TM) by Red Hat”插件即可 安装此插件后,会自动安装包含如下插件,不再需要单独安装 Project Manager for Java Test Runner for J…...
Git Flow分支模型
经典分支模型(Git Flow) 由 Vincent Driessen 提出的 Git Flow 模型,是管理 main(或 master)和 dev 分支的经典方案: main 用于生产发布,保持稳定; dev 用于日常开发,合并功能分支(feature/*); 功能开发在 feature 分支进行,完成后合并回 dev; 预发布分支(rele…...
机器人进阶---视觉算法(六)傅里叶变换在图像处理中怎么用
傅里叶变换在图像处理中怎么用 傅里叶变换的基本原理应用场景Python代码示例逐行解释总结傅里叶变换在图像处理中是一种重要的工具,它将图像从空间域转换到频域,从而可以对图像的频率特性进行分析和处理。傅里叶变换在图像滤波、图像增强、图像压缩和图像分析等方面都有广泛应…...
Linux-skywalking部署步骤并且添加探针
skywalking部署步骤 上传skywalking安装包并解压将skywalking安装包apache-skywalking-apm-10.1.0.tar.gz上传到服务器/data目录下 用解压命令解压 cd /data tar -xvf apache-skywalking-apm-10.1.0.tar.gz 解压后重名目录 mv apache-skywalking-apm-bin skywalking 上传…...
开启报名!火山引擎 x PICO-全国大学生物联网设计竞赛赛题发布
全国大学生物联网设计竞赛(以下简称“竞赛”)是教育部高等学校计算机类专业教学指导委员会创办的物联网领域唯一的学科竞赛,是以学科竞赛推动专业建设、培养大学生创新能力为目标,面向高校大学生举办的全国性赛事。自 2014 年开始…...
【遥感科普】光谱分辨率是什么?
光谱分辨率是指传感器或光谱仪器在电磁波谱中区分相邻波长或频率的能力。它反映了设备对光谱细节的捕捉能力,通常用波长间隔(如纳米,nm)或波数(cm⁻)表示。例如,若光谱分辨率为10 nm,…...
Trae国内版怎么用?Trae IDE 内置 MCP 市场配置使用指南
近日,字节跳动旗下Trae IDE发布了全新版本,新版本中,Trae IDE 的自定义智能体能力让 AI 能够基于开发者需求灵活调度多维度的工具和资源,从而为任务提供全方位的支持,只需一下即可召唤智能体,这个过程中&am…...
Javase 基础入门 —— 02 基本数据类型
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 注释 单…...
模型 螃蟹效应
系列文章分享模型,了解更多👉 模型_思维模型目录。个体互钳,团队难行。 1 螃蟹效应的应用 1.1 教育行业—优秀教师遭集体举报 行业背景:某市重点中学推行绩效改革,将班级升学率与教师奖金直接挂钩,打破原…...
597页PPT丨流程合集:流程梳理方法、流程现状分析,流程管理规范及应用,流程绩效的管理,流程实施与优化,流程责任人的角色认知等
流程梳理是通过系统化分析优化业务流程的管理方法,其核心包含四大步骤:①目标确认,明确业务痛点和改进方向;②现状分析,通过流程图、价值流图还原现有流程全貌,识别冗余环节和瓶颈节点;③优化设…...
Kotlin集合全解析:List和Map高频操作手册
Kotlin 中 Map 和 List 常用功能总结 List 常用功能 创建 List val immutableList listOf(1, 2, 3) // 不可变列表 val mutableList mutableListOf("a", "b", "c") // 可变列表 val emptyList emptyList<String>() // 空列表基本…...
【springsecurity oauth2授权中心】自定义登录页和授权确认页 P2
上一篇跑通了springsecurity oauth2的授权中心授权流程,这篇来将内置的登录页和授权确认页自定义一下 引入Thymeleaf 在模块authorization-server下的pom.xml里引入模板引擎 <dependency><groupId>org.springframework.boot</groupId><arti…...
Springboot整合MyBatisplus和快速入门
MyBatisPlus MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 MyBatisPlus的官方网址: MyBatis-Plus 🚀 为简化开发而生 快速入门 导入起步依赖…...
Vue2-基础使用模板
data和el的第一种写法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>VUE</title><script type"text/javascript" src"../js/vue.js"></script> </head&g…...
Vue2-指令语法
v-bind和v-model <a v-bind:href"url">笔记1</a> <a :href"url">笔记2</a><input type"text" v-model:value"name"/> <input type"text" v-model"name"/>data(){return {ur…...
Cesium学习笔记——坐标系统及坐标转换
前言 在Cesium的学习中,学会读文档十分重要!!!在这里附上Cesium中英文文档1.117。 在Cesium中,一共有四种比较重要的坐标系,分别是地理坐标系,地心地固坐标系,东-北-上局部坐标系和屏…...
【AI微信小程序开发】大转盘小程序项目代码:自设转盘选项和概率(含完整前端+后端代码)
系列文章目录 【AI微信小程序开发】AI减脂菜谱小程序项目代码:根据用户身高/体重等信息定制菜谱(含完整前端+后端代码)【AI微信小程序开发】AI菜谱推荐小程序项目代码:根据剩余食材智能生成菜谱(含完整前端+后端代码)【AI微信小程序开发】图片工具小程序项目代码:图片压…...
C语言文件操作完全手册:读写·定位·实战
1.什么是文件 1.1文件的概念 文件(File)是计算机中用于持久化存储数据的基本单位。它可以存储文本、图片、音频、程序代码等各种信息,并在程序运行结束后仍然保留数据。 1.2文件名 一个文件要有一个唯一的文件标识,以便用户识别…...
网络协议之详解(Detailed Explanation of Network Protocol)
NFS、FTP、SMB、WebDav、DLNA协议 大家好!今天来和大家聊聊让很多人都感到困惑的 NFS、FTP、SMB、WebDav、DLNA 这几种协议。相信不少人在面对它们的时候,常常是一头雾水,傻傻分不清。别担心,看完这篇文章,你就会对它…...
VICP(Velocity-based ICP):通过运动校准实现精准姿态估计
在三维点云配准的领域,经典的ICP(Iterative Closest Point)算法已经成为广泛使用的方法,尤其是在处理静态环境中的点云配准时,效果非常好。然而,随着动态场景的出现,物体运动和传感器的变动引发…...
典籍知识问答典籍查询界面前端界面设计效果实现
根据组内负责前端界面设计的同学的界面设计,进行典籍查询前端界面的实现 1.实现效果 2.前端代码 ClassicView.vue <template> <div class"classics"> <img className"back" alt"Back" src"https://c.animaapp…...
Megatron - LM 重要文件解析 - /tools/preprocess_data.py
preprocess_data.py 的主要功能。这是 Megatron-LM 的数据预处理脚本,主要用于将原始文本数据转换为模型训练所需的格式。 核心功能: 1. 数据预处理流程: 输入:原始文本文件(JSON格式) 处理:…...
探索RTOS在电力控制系统中的应用价值
电力控制系统对实时性、可靠性和高效性有着严苛要求,实时操作系统(RTOS)凭借其独特性能优势,在其中扮演关键角色。本文深入剖析RTOS在电力控制系统中的重要作用,探讨其应用前景,助力推动电力行业智能化、现…...
第5章-1 优化服务器设置
上一篇:《第4章-5 linux 网络管理》,接着服务器设置 本章我们将解释如何为MySQL服务器创建合适的配置文件。这是一个迂回的旅程,有许多兴趣点和可以俯瞰风景的短途旅程。这些短途旅程是必要的。确定合适配置的最短路径并不是从研究配置选项并…...
进阶篇 第 4 篇:驾驭季节性波动 - SARIMA 模型实战
进阶篇 第 4 篇:驾驭季节性波动 - SARIMA 模型实战 (图片来源: Pixabay on Pexels) 在上一篇中,我们深入探索了经典的 ARIMA(p,d,q) 模型。它通过整合自回归 (AR)、差分 (I) 和移动平均 (MA) 提供了一个强大的框架来对(处理后)平…...
Android调用springboot接口上传大字段,偶现接口超时的优化
介绍 最近有个功能,Android通过okhttp上传实体类,实体类包含一个大字段,上传的字符串长度达到300k,偶现接口超时的情况,大概100次有5次,看日志发现数据并没有到达接口,可能在网络传输中就超时了…...
[特殊字符]【Qt自定义控件】创意开关按钮 - 丝滑动画+自定义样式+信号交互 | 附完整源码
话不多说直接上代码 1、.mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H#include <QWidget> #include <QPropertyAnimation>class MyButton : public QWidget {Q_OBJECT public:explicit MyButton(QWidget *parent nullptr);protected:void paintEvent(QPain…...
大数据开发的基本流程
大数据开发通常围绕数据的“采集 → 存储 → 处理 → 分析 → 展示”几个阶段来展开。下面是一个典型的大数据开发基本流程(适用于离线或实时场景): 一、数据采集(Data Ingestion) 目标:从各种来源采集原始…...
关于创建UNIX/Linux daemon进程的笔记
Linux daemon程序简单说就是Linux后台服务进程。 传统的、标准的创建方法:2次fork setsid 详细步骤 进程1(父进程)调用fork,创建子进程2,进程1退出。 1)这个步骤是为第二部做铺垫。 2)此时&a…...
国产紫光同创FPGA实现SDI视频编解码,基于HSSTHP高速接口,提供3套工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目本博已有的 SDI 编解码方案本方案在Xilinx--Artix7系列FPGA上的应用本方案在Xilinx--Kintex系列FPGA上的应用本方案在Xilinx--Zynq系列FPGA上的应用本方案在Xilinx--U…...
Oracle--SQL性能优化与提升策略
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、导致性能问题的内在原因 系统性能问题的底层原因主要有三个方面: CPU占用率过高导致资源争用和等待内存使用率过高导致内存不足并需…...
drupal7可以从测试环境一键部署到生产环境吗
Drupal 7 本身并没有“内建的一键部署功能”,所以“从测试环境一键部署到生产环境”不能完全自动化完成,尤其是涉及数据库、配置和文件系统时。但你可以通过一些工具和方法实现接近“一键部署”的效果 ✅ 🚧 为什么不能直接一键部署ÿ…...
vue项目中axios统一或单独控制接口请求时间
先说统一 这里将请求时间统一控制在12秒 // 使用由库提供的配置的默认值来创建实例 // 此时超时配置的默认值是 0 const axiosInstance axios.create()// 覆写库的超时默认值 // 现在,在超时前,所有请求时间统一控制在10秒 axiosInstance.defaults.ti…...
chromedp 反反爬设计方案
二、基础防护层实现 1. 浏览器特征伪装 opts : append(chromedp.DefaultExecAllocatorOptions[:],// 禁用自动化特征chromedp.Flag("disable-blink-features", "AutomationControlled"),chromedp.Flag("useAutomationExtension", false),// 随…...
OpenLDAP 管理 ELK 用户
文章目录 一、新建 ELK 相关用户组二、配置 Elasticsearch2.1 修改 elasticsearch.yml 配置2.2 使用 API 接口建立角色和用户映射 三、Kibana 验证用户登录 一、新建 ELK 相关用户组 由于后续要将 LDAP 的用户与 ELK 的角色进行映射,所以需先创建几个以 ELK 的角色…...
深度解析MQTT源码架构与AIGC场景融合实战
一、结构体内存优化:支撑千万级设备连接 1.1 紧凑内存布局设计 classDiagramclass MQTTClient_message {char struct_id[4]int struct_versionvoid* payloadint payloadlenint qosint retainedint dupint msgidMQTTProperties properties}note for MQTTClient_mes…...
Node.js 操作 ElasticSearch 完整指南:从安装到实战
本文将手把手教你如何搭建 ElasticSearch 环境,并通过 Node.js 实现高效数据检索。包含 10 个可直接复用的代码片段,助你快速掌握搜索、聚合等核心功能! 环境搭建篇 1. ElasticSearch 安装要点 下载 es下载连接 下载下来后,进…...
Python+区块链:如何打造智能化资产管理系统?
Python+区块链:如何打造智能化资产管理系统? 在当今数字经济时代,区块链资产管理已成为金融科技、去中心化金融(DeFi)以及企业资金流转的关键应用。传统的资产管理往往依赖于中心化机构,存在数据透明度低、效率受限、管理成本高等问题,而区块链技术的出现,为资产管理提…...
Sentinel源码—8.限流算法和设计模式总结一
大纲 1.关于限流的概述 2.高并发下的四大限流算法原理及实现 3.Sentinel使用的设计模式总结 1.关于限流的概述 保护高并发系统的三把利器:缓存、降级和限流。限流就是通过限制请求的流量以达到保护系统的目的,比如秒杀抢购。具体就是对并发请求进行限…...