从新手到高手:彻底掌握MySQL表死锁

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

🎏:你只管努力,剩下的交给时间

🏠 :小破站

从新手到高手:彻底掌握MySQL表死锁

    • 前言
    • 什么是死锁
    • mysql死锁的原因
      • 1. 互斥资源的竞争
      • 2. 事务执行时间过长
      • 3. 不一致的锁定顺序
      • 4. 缺乏索引
      • 5. 行锁升级
      • 6. 锁范围问题
      • 7. 外键约束
      • 8. 不适当的事务隔离级别
    • 如何检测死锁
      • 1. 自动死锁检测
      • 2. 使用InnoDB监控命令
        • 查看InnoDB状态
        • 示例输出
      • 3. 通过错误日志
      • 4. 使用第三方监控工具
      • 5. 手动分析应用程序日志
    • SHOW ENGINE INNODB STATUS详解
      • 1. BACKGROUND THREAD
      • 2. SEMAPHORES
      • 3. LATEST FOREIGN KEY ERROR
      • 4. LATEST DETECTED DEADLOCK
      • 5. TRANSACTIONS
      • 6. FILE I/O
      • 7. INSERT BUFFER AND ADAPTIVE HASH INDEX
      • 8. LOG
      • 其他部分
    • 死锁的预防方法
    • 解决数据库死锁的方法
    • 超过innodb_lock_wait_timeout还一直被锁
      • 1. 手动锁定表
      • 2. 非InnoDB存储引擎
      • 3. 全局锁定
      • 4. 长时间运行的事务
      • 5. 死锁检测功能被禁用
      • 6. 复杂依赖关系导致的锁定
    • 当出现长时间运行的事务导致的所情况
      • 1. 检查和识别长时间运行的事务
      • 2. 终止长时间运行的事务
      • 3. 优化事务设计
      • 4. 合理设置锁等待超时时间
      • 5. 实施监控和报警机制
      • 6. 分析和优化查询
      • 7. 使用合适的隔离级别
      • 示例:终止长时间运行的事务

前言

在我们日常使用MySQL数据库的过程中,死锁问题可能会悄然而至,令人措手不及。就像两辆车在狭窄的巷子里互不相让,谁也过不去。本文将带你一探MySQL死锁的“巷子”,让你成为“交通指挥官”,从容应对数据库中的死锁问题。

什么是死锁

在MySQL中,死锁是指两个或多个事务在并发执行时,因争夺相同的资源而互相等待,从而导致这些事务都无法继续执行的情况。MySQL中的死锁通常发生在使用InnoDB存储引擎的情况下,因为InnoDB支持行级锁,而行级锁的使用会导致更复杂的锁定关系。

死锁示例

考虑以下简单的例子:

​ 1. 事务A开始并锁定了表T中的某一行。

​ 2. 事务B开始并锁定了表T中的另一行。

​ 3. 事务A尝试锁定事务B已经锁定的行,但被阻塞。

​ 4. 事务B尝试锁定事务A已经锁定的行,但也被阻塞。

这时,事务A和事务B都在等待对方释放锁,导致死锁。

mysql死锁的原因

在MySQL中,死锁通常发生在并发访问数据库时。具体来说,MySQL死锁的原因可以归结为以下几种情况:

1. 互斥资源的竞争

MySQL使用行级锁,这意味着在一个事务中,某些行可能会被锁定,使得其他事务无法访问这些行。如果多个事务竞争相同的资源并且请求锁的顺序不同,就可能导致死锁。例如:

  • 事务A锁定行1,尝试锁定行2。
  • 事务B锁定行2,尝试锁定行1。

2. 事务执行时间过长

长时间运行的事务会持有锁更长时间,从而增加死锁的可能性。尤其是在高并发环境中,长时间持有锁的事务更容易与其他事务发生冲突。

3. 不一致的锁定顺序

如果不同事务以不同的顺序请求相同的资源,就可能导致循环等待。例如,事务A先锁定资源R1,再锁定资源R2;而事务B先锁定资源R2,再锁定资源R1,这就可能导致死锁。

4. 缺乏索引

缺乏适当的索引会导致表扫描,增加锁定的行数,从而增加发生死锁的概率。例如,在一个没有索引的表上执行更新操作时,MySQL可能会锁定整个表或大量行。

5. 行锁升级

InnoDB存储引擎在某些情况下会将行锁升级为表锁。如果一个事务持有大量的行锁,并且其他事务尝试锁定同一张表中的其他行,这可能会导致死锁。

6. 锁范围问题

当一个查询涉及范围条件(如BETWEEN、LIKE等)时,MySQL可能会锁定比预期更多的行,从而增加死锁的可能性。例如:

  • UPDATE users SET age = age + 1 WHERE age BETWEEN 20 AND 30;
    这个查询可能会锁定所有age在20到30之间的行,如果其他事务也尝试访问这些行,可能会导致死锁。

7. 外键约束

带有外键约束的表在插入、更新或删除时,如果多个事务涉及相同的父子表,可能会导致死锁。例如,一个事务在父表中插入数据,另一个事务在子表中插入与父表相关的数据,这种情况下可能会发生死锁。

8. 不适当的事务隔离级别

高隔离级别(如Serializable)会增加锁的争用,从而增加死锁的可能性。选择适当的隔离级别可以减少锁冲突。

如何检测死锁

检测死锁是数据库管理中一个重要的任务。对于MySQL,尤其是使用InnoDB存储引擎时,提供了多种检测死锁的方法。以下是一些常用的方法:

1. 自动死锁检测

InnoDB存储引擎具有自动死锁检测机制。如果检测到死锁,它会自动选择一个事务进行回滚,以解除死锁。这个过程是自动进行的,开发者不需要额外干预。但是,了解系统如何检测死锁以及如何响应死锁事件非常重要。

2. 使用InnoDB监控命令

MySQL提供了一些命令可以用来检查死锁信息和调试:

查看InnoDB状态

可以通过以下命令查看InnoDB的状态,其中包含死锁相关的信息:

SHOW ENGINE INNODB STATUS;

该命令输出的结果中包含了最近一次检测到的死锁信息,包括死锁发生时的SQL语句、涉及的事务、锁等待信息等。

示例输出
------------------------
LATEST DETECTED DEADLOCK
------------------------
2023-06-27 12:34:56 0x7f8c3b0e7700
*** (1) TRANSACTION:
TRANSACTION 123456, ACTIVE 5 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 123, OS thread handle 140246293882624, query id 456 localhost root updating
UPDATE t1 SET c1 = c1 + 1 WHERE id = 1
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 1 page no 3 n bits 72 index PRIMARY of table `test`.`t1` trx id 123456 lock_mode X locks rec but not gap waiting
*** (2) TRANSACTION:
TRANSACTION 123457, ACTIVE 3 sec updating or deleting
mysql tables in use 1, locked 1
5 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1
MySQL thread id 124, OS thread handle 140246293882625, query id 457 localhost root updating
UPDATE t1 SET c1 = c1 + 1 WHERE id = 2
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 1 page no 3 n bits 72 index PRIMARY of table `test`.`t1` trx id 123457 lock_mode X locks rec but not gap
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 1 page no 3 n bits 72 index PRIMARY of table `test`.`t1` trx id 123457 lock_mode X locks rec but not gap waiting

3. 通过错误日志

当InnoDB检测到死锁并回滚一个事务时,会在MySQL错误日志中记录相关信息。你可以检查错误日志来了解死锁事件:

tail -f /var/log/mysql/error.log

4. 使用第三方监控工具

有许多第三方监控工具可以帮助你检测和分析MySQL中的死锁,例如:

  • Percona Toolkit:提供了一些工具,如pt-deadlock-logger,可以持续监控和记录死锁信息。
  • MySQL Enterprise Monitor:MySQL官方的企业级监控工具,可以提供死锁检测和告警功能。

5. 手动分析应用程序日志

在一些情况下,尤其是开发和测试环境中,可以通过手动分析应用程序日志来检测死锁。记录每个事务的开始、结束和异常信息,包括死锁异常,能够帮助你识别死锁模式。

SHOW ENGINE INNODB STATUS详解

SHOW ENGINE INNODB STATUS 是一个命令,用于提供有关 InnoDB 存储引擎的当前状态和活动的信息。以下是该命令输出的主要部分的详细解释:

1. BACKGROUND THREAD

这个部分显示了 InnoDB 后台线程的活动:

  • srv_master_thread loops: 主线程的循环次数,包括活动、空闲和关闭的循环次数。
  • srv_master_thread log flush and writes: 主线程进行日志刷新和写入的次数。

2. SEMAPHORES

这个部分显示了有关 InnoDB 内部信号量的统计信息:

  • OS WAIT ARRAY INFO: reservation count: 操作系统等待的次数。
  • OS WAIT ARRAY INFO: signal count: 操作系统信号的次数。
  • RW-shared spins, RW-excl spins, RW-sx spins: 读写锁自旋的次数。
  • Spin rounds per wait: 每次等待的自旋轮数。

3. LATEST FOREIGN KEY ERROR

这个部分显示了最新的外键错误:

  • 发生外键错误的时间。
  • 导致外键错误的事务及其详细信息。
  • 错误涉及的父表和子表的记录。

4. LATEST DETECTED DEADLOCK

这个部分显示了最新检测到的死锁:

  • 死锁检测到的时间。
  • 参与死锁的事务及其详细信息。
  • 每个事务持有的锁和等待的锁。
  • 被回滚的事务。

5. TRANSACTIONS

这个部分显示了当前活动的事务:

  • Trx id counter: 当前事务 ID 计数器。
  • Purge done for trx's n:o: 已完成的清除事务 ID。
  • 每个会话的事务列表,包括每个事务持有的锁、堆大小等。

6. FILE I/O

这个部分显示了文件 I/O 的详细信息:

  • 每个 I/O 线程的状态。
  • 挂起的普通 aio 读取和写入的数量。
  • 文件系统同步的数量。
  • 每秒读取、写入和 fsync 的次数。

7. INSERT BUFFER AND ADAPTIVE HASH INDEX

这个部分显示了插入缓冲区和自适应哈希索引的详细信息:

  • Ibuf: 插入缓冲区的大小和合并操作的数量。
  • merged operations: 已合并的插入和删除标记操作的数量。
  • discarded operations: 被丢弃的插入和删除标记操作的数量。
  • Hash table size: 哈希表的大小和缓冲区数量。
  • 每秒的哈希搜索和非哈希搜索次数。

8. LOG

这个部分显示了日志的详细信息:

  • Log sequence number: 日志序列号。
  • Log flushed up to: 已刷新日志的序列号。
  • Pages flushed up to: 已刷新页面的序列号。
  • Last checkpoint at: 最后一个检查点的位置。
  • 挂起的日志刷新和检查点写入的数量。
  • 日志 I/O 的总次数和每秒的 I/O 次数。

其他部分

还有一些其他部分提供了有关缓冲池、事务日志、行操作和表锁的信息,这些部分通常用于深入分析数据库的性能问题和调优。

通过以上各个部分的信息,数据库管理员可以了解 InnoDB 存储引擎的当前状态、检测到的问题(如死锁和外键错误),并根据这些信息进行数据库的优化和故障排除。

死锁的预防方法

预防数据库死锁的方法主要包括以下几个方面:

  1. 规范化锁顺序

    • 确保事务在获取多个锁时遵循一致的顺序。这样可以避免多个事务在相反的顺序上获取相同的锁,从而减少死锁的可能性。
  2. 最小化锁持有时间

    • 在事务中尽量减少锁的持有时间,避免长时间的锁定操作。可以将长时间的计算和处理放在事务之外进行,然后再进行短时间的事务操作。
  3. 使用较小的锁粒度

    • 尽量使用较小的锁粒度(例如,行级锁而不是表级锁)。虽然这可能会增加管理的复杂性,但可以减少锁冲突的机会。
  4. 合理设置锁超时

    • 设置合理的锁超时值,确保事务在等待锁的时间超过一定限度后自动放弃,从而避免长时间的死锁状态。
  5. 使用合适的隔离级别

    • 根据业务需求选择合适的事务隔离级别。较高的隔离级别(如串行化)可以减少并发操作的干扰,但也可能增加死锁的机会。较低的隔离级别(如读已提交)可以减少死锁,但可能会带来脏读等问题。
  6. 避免大批量更新

    • 将大批量更新操作分解为较小的批次进行处理,以减少锁冲突的可能性。
  7. 监控和调优

    • 定期监控数据库的死锁情况,分析死锁日志,找出死锁频繁发生的原因,并进行相应的调优。

通过以上方法,可以有效减少数据库中死锁的发生,从而提高系统的并发处理能力和稳定性。

解决数据库死锁的方法

解决数据库死锁的方法主要有以下几种:

  1. 检测并终止死锁

    • 数据库管理系统(DBMS)可以定期检测系统中的死锁情况。当检测到死锁时,可以选择强制终止一个或多个事务,使其回滚,释放资源,从而打破死锁。
  2. 事务回退

    • 如果系统检测到死锁,可以选择回退某些事务,使其重新开始。通常选择回退资源消耗较少的事务,以减少对系统性能的影响。
  3. 手动干预

    • 数据库管理员可以通过手动查看死锁日志和事务信息,手动终止相关的事务来解决死锁问题。手动干预适用于死锁问题较少且能够快速定位死锁原因的情况。
  4. 设置事务超时

    • 为每个事务设置一个超时时间,当事务等待超过该时间后自动终止并回滚。这样可以防止长时间的死锁,但需要权衡超时时间的合理设置。
  5. 调整锁策略

    • 根据死锁发生的情况,调整数据库的锁策略。例如,减少锁的粒度、优化锁的顺序、减少长时间持有锁的操作等。
  6. 使用适当的事务隔离级别

    • 根据业务需求,选择适当的事务隔离级别。虽然高隔离级别可以避免并发问题,但也可能增加死锁的风险。合理选择隔离级别可以在性能和一致性之间取得平衡。
  7. 优化SQL语句和索引

    • 优化查询和更新的SQL语句,确保高效执行。创建适当的索引,减少全表扫描,降低锁争用的概率。
  8. 分区和分片

    • 将大型表进行分区或分片处理,将数据分散到不同的物理文件或服务器上,减少锁冲突的机会。

通过以上方法,可以有效解决数据库中发生的死锁问题,确保系统的稳定性和高效性。

超过innodb_lock_wait_timeout还一直被锁

在MySQL中,正常情况下,InnoDB会在检测到死锁后自动回滚其中一个事务,以解除死锁。然而,有些情况下表可能会一直被锁,即使超过了innodb_lock_wait_timeout参数设置的时间。这种情况的发生通常是由于以下原因:

1. 手动锁定表

使用LOCK TABLES语句手动锁定表时,如果忘记释放锁,则表会一直保持锁定状态。即使超过innodb_lock_wait_timeout时间,这种锁定也不会自动解除。

-- 锁定表
LOCK TABLES table1 WRITE;-- 忘记解锁表
-- UNLOCK TABLES;

2. 非InnoDB存储引擎

某些存储引擎(如MyISAM)不支持事务和自动死锁检测。对于这些存储引擎,如果表被锁定,则需要手动解除锁定,否则表会一直保持锁定状态。

3. 全局锁定

使用FLUSH TABLES WITH READ LOCKSET GLOBAL read_only = 1命令进行全局锁定时,所有表都会被锁定,直到手动解除锁定。

-- 全局读锁定
FLUSH TABLES WITH READ LOCK;-- 解除全局读锁定
UNLOCK TABLES;

4. 长时间运行的事务

如果有一个长时间运行的事务持有锁,其他事务在尝试访问相同资源时会一直等待,直到长时间运行的事务完成或达到锁等待超时。即使锁等待超时,持有锁的事务仍会继续运行,并保持锁定状态。

5. 死锁检测功能被禁用

如果InnoDB的死锁检测功能被禁用,系统将无法自动检测和回滚死锁事务,导致锁定一直存在。

-- 启用死锁检测
SET GLOBAL innodb_deadlock_detect = ON;

6. 复杂依赖关系导致的锁定

某些复杂的事务依赖关系可能导致锁定未被及时检测和处理,尤其是在高负载情况下,死锁检测可能会有延迟,导致锁定状态持续。

当出现长时间运行的事务导致的所情况

当出现第四种情况,即由于长时间运行的事务导致其他事务一直等待时,可以采取以下措施来解决问题:

1. 检查和识别长时间运行的事务

首先,检查当前正在运行的事务,识别出长时间运行的事务。

-- 查看正在运行的事务
SHOW PROCESSLIST;-- 查看锁定信息
SHOW ENGINE INNODB STATUS;

通过上述命令,可以获取当前正在运行的所有事务和锁定信息,包括事务的执行时间、持有的锁等。

2. 终止长时间运行的事务

在确认长时间运行的事务不会影响数据一致性和业务逻辑的前提下,可以手动终止该事务以释放锁。

-- 获取长时间运行的事务的ID(在SHOW PROCESSLIST输出中)
KILL <process_id>;

3. 优化事务设计

为了防止将来再次出现长时间运行的事务,可以对事务设计进行优化:

  • 减少事务的复杂性:尽量避免在一个事务中执行过多的操作,将复杂的事务拆分为多个简单的事务。
  • 缩短事务的执行时间:避免在事务中进行耗时操作,如复杂的计算、长时间的等待等。
  • 按顺序请求锁:确保所有事务按相同的顺序请求锁,以减少发生死锁的可能性。

4. 合理设置锁等待超时时间

根据实际业务需求,合理设置锁等待超时时间(innodb_lock_wait_timeout),避免事务长时间等待。

-- 查看当前锁等待超时时间(默认50秒)
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';-- 设置锁等待超时时间为合理的值(例如10秒)
SET GLOBAL innodb_lock_wait_timeout = 10;

5. 实施监控和报警机制

实施监控和报警机制,实时监控数据库的运行状况,包括事务的执行时间、锁等待情况等。一旦检测到长时间运行的事务或锁等待超时,可以及时采取措施。

6. 分析和优化查询

对于导致长时间运行的事务,可以分析和优化其包含的查询,确保查询的高效性。

-- 查看慢查询日志
SHOW VARIABLES LIKE 'slow_query_log';

7. 使用合适的隔离级别

根据业务需求选择合适的事务隔离级别,降低锁争用的概率。例如,可以考虑使用读已提交(READ COMMITTED)或可重复读(REPEATABLE READ)隔离级别。

-- 设置会话级别隔离级别为读已提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

示例:终止长时间运行的事务

假设你通过SHOW PROCESSLIST命令找到了一个执行时间超过50秒的事务,其Id为1234。你可以通过以下命令终止该事务:

KILL 1234;

通过这些措施,可以有效地管理和优化长时间运行的事务,避免事务长时间等待和表锁定问题,确保数据库的高效运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven仓库的作用以及安装 , DEA配置本地Maven

ay12-maven 主要内容 Maven的作用Maven仓库的作用Maven的坐标概念Maven的安装IDEA配置本地Maven 一、maven概述 1.1、项目开发中的问题 1、我的项目依赖一些jar包&#xff0c;我把他们放在哪里&#xff1f;直接拷贝到项目的lib文件夹中?如果我开发的第二个项目还是需要上面…

网管工作实践_02_IP/MAC地址管理工具

1、ipconfig命令格式及参数 ipconfig是内置于Windows的TCP/IP应用程序&#xff0c;用于显示本地计算机网络适配器的MAC地址和IP地址等配置信息&#xff0c;这些信息一般用来榆验手动配置的TCP/IP设置是否正确。当在网络中使用 DHCP服务时&#xff0c;IPConfig可以检测计算机中分…

6.26.8 基于多视角深度卷积神经网络的高分辨率乳腺癌筛查

1. 介绍 1.1 乳腺癌筛查 开发了一种新的DCN&#xff0c;它能够处理乳房x线摄影筛查的多个视图&#xff0c;并利用大分辨率图像而不缩小。将这种DCN称为多视图深度卷积网络(MV-DCN)。网络学习预测放射科医生的评估&#xff0c;将传入的样本分类为BI-RADS 0(“不完整”)&#xf…

网络问题排障专题-AF网络问题排障

目录 一、数据交换基本原理 1、ARP协议工作原理 数据包如图&#xff1a; 2、二层交换工作原理 简述核心概念&#xff1a; 二层交换原理-VLAN标签 3、三层交换工作原理 二、AF各种部署模式数据转发流程 1、路由模式数据转发流程 三、分层/分组逐一案例讲解 1、问题现…

免费分享一套SpringBoot+Vue在线水果(销售)商城管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue在线水果(销售)商城管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue在线水果(销售)商城管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue在线水果(销售)商…

Android高级面试_8_热修补插件化等

Android 高级面试&#xff1a;插件化和热修复相关 1、dex 和 class 文件结构 class 是 JVM 可以执行的文件类型&#xff0c;由 javac 编译生成&#xff1b;dex 是 DVM 执行的文件类型&#xff0c;由 dx 编译生成。 class 文件结构的特点&#xff1a; 是一种 8 位二进制字节…

探索Facebook的未来世界:数字社交的演进之路

在数字化和全球化的浪潮中&#xff0c;社交网络如Facebook已经成为了人们日常生活不可或缺的一部分。然而&#xff0c;随着技术的迅猛发展和用户需求的不断变化&#xff0c;Facebook正在经历着社交平台的演进之路。本文将探索Facebook的未来世界&#xff0c;分析数字社交的发展…

技术选型新趋势:中小型企业如何选用高效CRM“小型应用”进行客户管理

众所周知&#xff0c;CRM应用通过优化客户信息管理、提升销售效率、提高客户服务质量、实现市场营销自动化以及支持数据分析与决策等方面&#xff0c;为企业创造更大的价值&#xff0c;提升企业的竞争力和市场份额。 对初创型、中小型企业来说&#xff0c;使用合适的CRM应用至…

【LLVM】学习使用PGO优化

笔者在查看PGO优化时看到了本站的这篇文章&#xff0c;其中代码和命令行部分贴上了序号&#xff0c;且命令行带上了$符号&#xff0c;不便于读者调试。 遂将代码重新整理到gitee&#xff0c;链接在此。 汇编代码分析 目前笔者使用的llvm版本为llvm-19&#xff0c;主要改动发生…

RK3588编译环境配置

安装Ubuntu18.04 安装Ubuntu请参考其他教程 安装vmware-tools 如果vmware版本过低&#xff0c;vmware-tools安装可能会出现各种问题。 建议直接用apt-get install安装vmware-tools sudo apt-get update sudo apt-get install open-vm-tools open-vm-tools-desktop vmware-…

从CVPR 2024看域适应、域泛化最新研究进展

域适应和域泛化一直以来都是各大顶会的热门研究方向。 域适应指&#xff1a;当我们在源域上训练的模型需要在目标域应用时&#xff0c;如果两域数据分布差异太大&#xff0c;模型性能就有可能降低。这时可以利用目标域的无标签数据&#xff0c;通过设计特定方法减小域间差异&a…

Flutter笔记(一)- 安装和配置Flutter

一、下载Flutter 访问网址&#xff1a;https://docs.flutter.dev/get-started/install?hlzh-cn 根据电脑所使用的操作系统的平台进行选择。笔者电脑的操作系统为Windows&#xff0c;因此选择如图1-1的Windows图片&#xff1a; 图1-1 Flutter网站&#xff08;一&#xff09; …

国行版苹果Vision Pro即将发售 高昂定价吓退普通消费者?

2024年2月2日&#xff0c;苹果第一代空间计算设备Vision Pro在美国上市。6月28日&#xff0c;国行版苹果Vision Pro也将正式发售&#xff0c;别为256GB版29999元、512GB版31499元、1TB版32999元。不过从此前Vision Pro预售情况来看&#xff0c;Vision Pro的“杀手锏”在“价格”…

【应届应知应会】Linux常用指令

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 文件与目录管理 目录操作命令&#xff1a; ls [选项] [目录或文件] mkdir 文件操作命令&#xf…

多媒体本地化的五个步骤

多媒体本地化为试图在多个全球目的地建立市场的企业提供了许多好处。 由于多媒体并不局限于一个内容标签&#xff0c;因此您需要注意一些元素。 这个过程通常从翻译开始&#xff0c;但因为我们处理的是视频和音频&#xff0c;所以从一开始就要处理一个附加层。让我们从这里开…

SqlServer 2008远程过程调用失败,错误代码[0x800706be]

1、解决方式&#xff1a; 将SQL 2008 R2升级到SP1或SP2 下载地址&#xff1a;SQL Server 2008 R2 Service Pack 2下载地址

非最大值抑制(NMS)函数

非最大值抑制&#xff08;NMS&#xff09;函数 flyfish 非最大值抑制&#xff08;Non-Maximum Suppression, NMS&#xff09;是计算机视觉中常用的一种后处理技术&#xff0c;主要用于目标检测任务。其作用是从一组可能存在大量重叠的候选边界框中&#xff0c;筛选出最具代表…

初学51单片机之长短键应用定时炸弹及扩展应用

51单片机RAM区域划分 51单片机的RAM分为两个部分&#xff0c;一块是片内RAM&#xff0c;一块是片外RAM。 data&#xff1a; 片内RAM从 0x00 ~0x7F 寻址范围&#xff08;0-127&#xff09; 容量共128B idata: 片外RAM从 0x00~0xFF 寻址范围(0-255) 容量共256B pdata&am…

定位问题6.27 petal数据接口问题

petal接口响应结果 响应结果为空的数据&#xff0c;而我们需要的是正确的响应结果。 排查问题 确认接口是否正确 以下是爬虫的配置文件内容&#xff0c;我查看了PETAL_URL的接口&#xff0c;并询问接口开发人员&#xff0c;得知接口地址并未改变 确认接口请求体是否正确 我使…

记一次对ouija渗透测试c语言逆向学习

概要 初始知识 web应用枚举 二进制逆向 文件枚举 堆栈溢出 学到知识 hash长度攻击 任意文件读取 二进制逆向分析 信息收集 端口扫描 nmap --min-rate 1000 -p- 10.129.30.104 发现22&#xff0c;80&#xff0c;3000端口 网站探测 目录枚举 feroxbuster -u http://10.1…