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

建设银行信用卡网站是哪个好营销网站建设规划

建设银行信用卡网站是哪个好,营销网站建设规划,找人做网站被骗为什么不构成诈骗罪,坑人的网站链接怎么做目录 1. 环境准备:创建“账户”和“标记”表1.1 创建 dl_account_t 表1.2 创建 dl_mark_t 表 2. 死锁详解2.1 死锁情景一:相反加锁顺序导致的死锁2.2 死锁情景二:唯一索引冲突引发的死锁 3. 事务隔离级别与锁机制4. 预防与解决死锁的方法4.1 …

目录

    • 1. 环境准备:创建“账户”和“标记”表
      • 1.1 创建 `dl_account_t` 表
      • 1.2 创建 `dl_mark_t` 表
    • 2. 死锁详解
      • 2.1 死锁情景一:相反加锁顺序导致的死锁
      • 2.2 死锁情景二:唯一索引冲突引发的死锁
    • 3. 事务隔离级别与锁机制
    • 4. 预防与解决死锁的方法
      • 4.1 预防死锁
      • 4.2 处理死锁
    • 5. 实践中的最佳实践
    • 6. 总结
      • 参考

在数据库的并发世界中, 死锁就像是交通高峰期的两辆车相向而行,彼此堵在十字路口,谁也不肯后退,导致交通完全停滞。死锁不仅会导致系统性能下降,还可能引发数据处理的中断。因此,深入理解死锁的成因及其解决方法对于数据库管理至关重要。本文详细解析两种常见的死锁情景,并探讨预防和解决死锁的方法。

1. 环境准备:创建“账户”和“标记”表

首先,我们有两个表:dl_account_tdl_mark_t。这些表模拟了不同的业务场景,通过这些场景,我们可以更直观地理解死锁的发生机制。

1.1 创建 dl_account_t

DROP TABLE IF EXISTS `dl_account_t`;
CREATE TABLE `dl_account_t` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(255) DEFAULT NULL,`money` INT(11) DEFAULT 0,`account_id` INT(11) DEFAULT 0,PRIMARY KEY (`id`),UNIQUE `uk_account_id` (`account_id`)
) ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;INSERT INTO `dl_account_t`(`name`,`money`,`account_id`) 
VALUES ('C', 1000, 10001),('B', 1000, 10002),('A', 1000, 10003),('ZZ', 1000, 10005);

1.2 创建 dl_mark_t

DROP TABLE IF EXISTS `dl_mark_t`;
CREATE TABLE `dl_mark_t` (`a` INT(11) NOT NULL DEFAULT '0',`b` INT(11) DEFAULT NULL,PRIMARY KEY (`a`),UNIQUE KEY `uk_b` (`b`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `dl_mark_t` VALUES (1,1),(5,4),(20,20),(25,12);

2. 死锁详解

死锁发生在两个或多个事务相互等待对方持有的资源,导致所有相关事务无法继续执行。接下来,通过两个具体的例子,深入探讨死锁的成因和表现。

2.1 死锁情景一:相反加锁顺序导致的死锁

场景描述

假设有两个事务同时操作 dl_account_t 表中的不同记录,但它们以相反的顺序加锁,导致彼此等待对方释放锁,最终形成死锁。

代码解析

-- 设置事务隔离级别为 REPEATABLE READ
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN-- 事务1:减少id=1的moneyUPDATE `dl_account_t` SET `money` = `money` - 100 WHERE `id` = 1;-- 事务2:减少id=2的money-- UPDATE `dl_account_t` SET `money` = `money` - 100 WHERE `id` = 2;-- 事务1:增加id=2的moneyUPDATE `dl_account_t` SET `money` = `money` + 100 WHERE `id` = 2;-- 事务2:减少id=1的money-- UPDATE `dl_account_t` SET `money` = `money` - 100 WHERE `id` = 1;ROLLBACK;

执行步骤

  1. 事务1开始,锁定id=1的记录,准备减少其money
  2. 事务2开始,尝试锁定id=2的记录,准备减少其money
  3. 事务1继续,尝试锁定id=2的记录,以增加其money。但此时,id=2已被事务2锁定,事务1进入等待状态。
  4. 事务2继续,尝试锁定id=1的记录,以减少其money。然而,id=1已被事务1锁定,事务2也进入等待状态。
  5. 形成循环等待,导致死锁。

可视化比喻

想象两位银行职员同时处理不同账户的转账操作。职员A首先锁定账户1,准备扣款;职员B同时锁定账户2,准备扣款。随后,职员A需要锁定账户2以完成转账,而职员B需要锁定账户1。这时,两位职员互相等待对方释放锁,无法继续操作,最终陷入僵局。

解决办法

  • 统一加锁顺序:确保所有事务以相同的顺序访问和锁定资源。例如,始终先锁定较小的id再锁定较大的id
  • 缩短事务时间:尽量减少事务中持有锁的时间,避免长时间占用资源。
  • 使用适当的隔离级别:选择合适的事务隔离级别,平衡并发性能和一致性需求。

2.2 死锁情景二:唯一索引冲突引发的死锁

场景描述

dl_mark_t表中,字段b设置了唯一索引。当多个事务尝试插入具有相同或相邻b值的记录时,如果处理不当,可能导致死锁。

代码解析

BEGIN-- 死锁事务2INSERT INTO `dl_mark_t` VALUES (26,10);-- 死锁事务1INSERT INTO `dl_mark_t` VALUES (30,10);-- 死锁事务2INSERT INTO `dl_mark_t` VALUES (40,9);

死锁情况一

  1. 事务2尝试插入b=10的记录,数据库检查唯一约束,锁定相应的索引范围(锁定b=10)。
  2. 事务1同时尝试插入b=10,由于唯一约束冲突,数据库在等待事务2释放锁。
  3. 事务2接着尝试插入b=9,需要锁定b=9的索引范围。然而,事务1已经持有相关锁,导致事务2进入等待状态。
  4. 形成循环等待,导致死锁。

死锁情况二

BEGIN-- 死锁事务1INSERT INTO `dl_mark_t` VALUES (27, 29);-- 死锁事务2INSERT INTO `dl_mark_t` VALUES (28, 29);-- 死锁事务3INSERT INTO `dl_mark_t` VALUES (29, 29);ROLLBACK;
  1. 事务1尝试插入b=29,锁定对应的索引范围。
  2. 事务2尝试插入相同的b=29,进入等待状态。
  3. 事务3也尝试插入b=29,同样进入等待状态。
  4. 事务1回滚,释放锁。事务2事务3继续执行,但由于相同的b=29值,可能继续产生锁冲突,进一步导致死锁。

可视化比喻

设想多个服务员同时为不同顾客准备带有相同配料的菜品。服务员A先锁定配料10,准备菜品;服务员B也锁定配料10,准备菜品。这时,服务员A需要配料9,而服务员B也需要配料10,但被服务员A锁定,形成僵局。

解决办法

  • 使用唯一性检查:在应用层面预先检查唯一约束,避免重复插入导致的锁冲突。
  • 序列化插入操作:通过队列或其他机制,确保同一时间只有一个事务进行特定范围的插入操作。
  • 优化索引设计:合理设计索引,减少锁冲突的概率。

3. 事务隔离级别与锁机制

理解事务隔离级别和锁机制对于预防死锁至关重要。以下是常见的事务隔离级别及其在锁机制中的表现:

  1. READ UNCOMMITTED

    • 特点:最低的隔离级别,允许脏读、不可重复读和幻读。
    • 锁机制:最少的锁定,几乎不加锁,极易发生并发异常。
  2. READ COMMITTED

    • 特点:防止脏读,但仍允许不可重复读和幻读。
    • 锁机制:在读取数据时使用共享锁(S锁),在写入数据时使用排他锁(X锁)。
  3. REPEATABLE READ

    • 特点:防止脏读和不可重复读,但在某些实现下仍可能允许幻读。
    • 锁机制:通过行级锁和间隙锁(Gap Locks)防止幻读,InnoDB默认使用此级别。
  4. SERIALIZABLE

    • 特点:最高的隔离级别,完全防止脏读、不可重复读和幻读。
    • 锁机制:事务之间完全串行化执行,使用更严格的锁定策略,性能开销较大。

在上述死锁情景中,REPEATABLE READ隔离级别下,由于间隙锁的存在,锁冲突的概率增加,从而更容易导致死锁。

4. 预防与解决死锁的方法

尽管死锁是并发控制中难以完全避免的问题,但通过合理的设计和策略,可以显著降低死锁的发生概率,并有效处理已发生的死锁。

4.1 预防死锁

  1. 统一资源访问顺序

    • 确保所有事务以相同的顺序访问和锁定资源,避免循环等待。例如,始终先锁定id=1再锁定id=2
  2. 缩短事务时间

    • 尽量减少事务中持有锁的时间,避免长时间占用资源。将复杂的计算和逻辑放在事务之外执行,仅在事务中进行必要的数据库操作。
  3. 合理设计索引

    • 通过优化索引设计,减少锁的粒度和范围,降低锁冲突的可能性。
  4. 使用适当的隔离级别

    • 根据业务需求选择合适的事务隔离级别,平衡数据一致性和并发性能。对于高并发系统,可能需要在性能和一致性之间做出权衡。

4.2 处理死锁

  1. 检测与回滚

    • 数据库管理系统(DBMS)通常具备死锁检测机制。当检测到死锁时,会自动回滚其中一个事务,释放锁资源。应用程序应捕获死锁异常,适时重试事务操作。
  2. 重试机制

    • 在事务因死锁被回滚后,应用程序可以设计自动重试机制,尝试重新执行事务,直至成功或达到重试次数限制。
  3. 日志记录与监控

    • 通过日志记录和监控工具,及时发现和分析死锁情况,优化数据库设计和事务逻辑,减少死锁发生的频率。

5. 实践中的最佳实践

在实际应用中,遵循以下最佳实践有助于有效管理和减少死锁问题:

  • 合理设计事务边界:确保事务尽可能简短,只包含必要的操作,避免在事务中执行耗时的任务。
  • 避免长时间持有锁:在事务中尽量避免用户交互或其他可能导致锁长时间不释放的操作。
  • 使用索引优化查询:通过合理的索引设计,优化查询性能,减少锁的竞争。
  • 监控与分析死锁:定期监控数据库的死锁情况,分析其成因,针对性地优化应用程序和数据库设计。

6. 总结

死锁是并发控制中不可避免的挑战,但通过深入理解其成因、合理设计事务和锁机制,以及采用有效的预防和处理策略,可以显著降低死锁对系统性能和稳定性的影响。通过上述两个具体的死锁情景分析,展示了死锁在实际操作中的表现和成因,提供了针对性的解决方案。持续优化数据库设计和事务管理,将有助于构建高效、稳定的并发系统。

参考

0voice · GitHub


文章转载自:
http://wanjiapunt.hwLk.cn
http://wanjiakraft.hwLk.cn
http://wanjiacassiterite.hwLk.cn
http://wanjiawoolen.hwLk.cn
http://wanjiafandom.hwLk.cn
http://wanjiarudd.hwLk.cn
http://wanjiavacant.hwLk.cn
http://wanjiacimelia.hwLk.cn
http://wanjiafossilology.hwLk.cn
http://wanjiacathedra.hwLk.cn
http://wanjiamanoir.hwLk.cn
http://wanjiaprecautious.hwLk.cn
http://wanjiamhc.hwLk.cn
http://wanjiatrendy.hwLk.cn
http://wanjialamentations.hwLk.cn
http://wanjiaphobia.hwLk.cn
http://wanjiasnacketeria.hwLk.cn
http://wanjiaorphanhood.hwLk.cn
http://wanjiadiplopod.hwLk.cn
http://wanjiafleshpot.hwLk.cn
http://wanjiarekindle.hwLk.cn
http://wanjiaseir.hwLk.cn
http://wanjiacounterpoise.hwLk.cn
http://wanjianecrose.hwLk.cn
http://wanjiafundamentally.hwLk.cn
http://wanjiasailorly.hwLk.cn
http://wanjiahomoerotic.hwLk.cn
http://wanjiasaturday.hwLk.cn
http://wanjiapiscary.hwLk.cn
http://wanjiarevertible.hwLk.cn
http://wanjiainsulinoma.hwLk.cn
http://wanjiabowl.hwLk.cn
http://wanjiaxavier.hwLk.cn
http://wanjiacircumstellar.hwLk.cn
http://wanjiapastelist.hwLk.cn
http://wanjiachirrupy.hwLk.cn
http://wanjiatrivium.hwLk.cn
http://wanjiaabstrusity.hwLk.cn
http://wanjialuganda.hwLk.cn
http://wanjiawidowhood.hwLk.cn
http://wanjiaamphipath.hwLk.cn
http://wanjiadatasheet.hwLk.cn
http://wanjiaeserine.hwLk.cn
http://wanjiaagrologist.hwLk.cn
http://wanjiafacultyman.hwLk.cn
http://wanjiakent.hwLk.cn
http://wanjiapunster.hwLk.cn
http://wanjiasirventes.hwLk.cn
http://wanjiacryptobiosis.hwLk.cn
http://wanjiadensitometer.hwLk.cn
http://wanjiaconsulting.hwLk.cn
http://wanjiatrendline.hwLk.cn
http://wanjiapolychromatic.hwLk.cn
http://wanjiapediatrician.hwLk.cn
http://wanjiabrachycephalic.hwLk.cn
http://wanjiatalcose.hwLk.cn
http://wanjiaflag.hwLk.cn
http://wanjiakelp.hwLk.cn
http://wanjiacotechino.hwLk.cn
http://wanjiaureterolithotomy.hwLk.cn
http://wanjiaextemporarily.hwLk.cn
http://wanjiamegalosaur.hwLk.cn
http://wanjialowermost.hwLk.cn
http://wanjiacognate.hwLk.cn
http://wanjiaasymmetrical.hwLk.cn
http://wanjiaadieu.hwLk.cn
http://wanjiadex.hwLk.cn
http://wanjiaagada.hwLk.cn
http://wanjiainductivity.hwLk.cn
http://wanjiawhit.hwLk.cn
http://wanjiainflation.hwLk.cn
http://wanjianimbly.hwLk.cn
http://wanjiagaffer.hwLk.cn
http://wanjianonuniformity.hwLk.cn
http://wanjiaflowerage.hwLk.cn
http://wanjiacalvinist.hwLk.cn
http://wanjianemathelminth.hwLk.cn
http://wanjiamicrolith.hwLk.cn
http://wanjiaconductometer.hwLk.cn
http://wanjiasochi.hwLk.cn
http://www.15wanjia.com/news/117691.html

相关文章:

  • 做字幕的网站百度应用市场app下载
  • 自动化科技产品网站建设深圳整合营销
  • 做展示类网站seo排名优化推广
  • 沧州地区阿里巴巴做网站廊坊百度关键词排名平台
  • 做网站有发票吗百度数据查询
  • 百度搜索到自己的网站鞍山做网站的公司
  • 党建网站制作培训机构有哪些
  • 有关建筑网站建设方案杭州网络推广公司
  • 临沭县哪里有建网站的国外免费域名
  • 如何去门户网站做推广呢网络代运营推广
  • 维护一个网站需要多少钱百度手机app下载安装
  • wordpress网站 华为网上推销产品的软件
  • 成都网站建设科技公司百度关键词优化词精灵
  • 国别网站定位命令 co .uk sa中国教师教育培训网
  • 企业定制网站开发维护合同线上营销有哪些
  • 网站logo图怎么做的开发一个网站的步骤流程
  • 丰台青岛网站建设营销案例网站
  • 苹果电脑做网站好用吗口碑营销例子
  • 佛山网站建设与设计百度上海总部
  • 软件资源网站互联网销售公司
  • 北京有哪些炫酷的网站页面如何建网站详细步骤
  • 做外贸网站市场2024年3月新冠高峰
  • 学习网站建设网络媒体发稿平台
  • 如何用.net做网站朔州seo
  • 怎样做咨询网站网站制作的费用
  • wordpress数据查询系统东莞优化seo
  • 网站服务公司业务范围包括长沙百度网站优化
  • 介绍一学一做视频网站百度优化教程
  • 网站做短链统计优缺点推广注册app赚钱平台
  • 四川建设发布网湖南专业seo优化