2022-02-18 04:56:21
SPU(Standard Product Unit):标准化产品单元,是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息集合,描述了产品的共同属性,如一部手机是一个SPU,它包含品牌、型号等通用属性。
SKU(Stock Keeping Unit):库存量单位,是物理上不可分割的最小存货单元,用于管理库存和销售,一部手机的不同颜色、存储容量等组合会生成不同的SKU,每个SKU有独立的库存数量。
更新统计信息:使用ANALYZE TABLE命令更新表的统计信息,让优化器能基于准确数据分布进行成本估算。
使用索引提示:在SQL语句中通过索引提示指定使用特定索引,如SELECT * FROM table_name FORCE INDEX (index_name) WHERE ...。
重写SQL语句:优化SQL结构,如避免使用复杂子查询、合理使用连接条件等,使优化器能生成更优执行计划。
查看错误日志:数据库错误日志会记录死锁相关信息,如MySQL的错误日志文件。
使用命令:在MySQL中可使用SHOW ENGINE INNODB STATUS命令查看最近一次死锁的详细信息。
终止事务:根据业务情况,选择终止其中一个或多个事务,释放锁资源。
优化事务:减少事务持有锁的时间,如将大事务拆分为小事务;合理设计事务隔离级别;避免在事务中进行耗时操作。
共享锁(S锁):又称读锁,多个事务可同时持有同一资源的共享锁,用于读取操作。
排他锁(X锁):又称写锁,一个事务持有某资源的排他锁时,其他事务不能获取该资源的任何锁,用于写入操作。
意向锁:表级锁,分为意向共享锁(IS)和意向排他锁(IX),用于提高锁获取效率,避免对整个表加锁。
构造器注入循环依赖:Spring无法在对象创建完成前注入依赖,会导致循环依赖无法解决。
多例Bean循环依赖:多例Bean每次获取都是新实例,Spring无法缓存中间状态解决循环依赖。
重构代码:调整类设计,避免出现循环依赖关系。
使用Setter注入:将构造器注入改为Setter注入,让Spring能在对象创建完成后注入依赖。
使用@Lazy注解:在依赖的Bean上添加@Lazy注解,延迟加载依赖,打破循环依赖。
原因:任务在执行过程中又提交了相同类型的任务到线程池,且线程池队列已满,新任务无法执行,导致线程等待,形成死锁。
解决方法:避免任务内部提交相同类型任务;合理设置线程池参数,如增大队列容量、调整核心线程数和最大线程数;使用有界队列并设置拒绝策略。