myisam不适合大量更新操作
来源:互联网 发布:软件需求分析模板 编辑:程序博客网 时间:2024/05/12 17:58
MyIASM表小于IASM表,所以使用较少资源。
MyIASM表在不同的平台上二进制层可移植。
MyIASM拥有更大的键码尺寸,更大的键码上限。
对于MyISAM存储引擎来说,它的读锁和写锁是互斥的,从而读写操作是串行的。那么,一个进程请求某个 MyISAM表的读锁,同时另一个进程也请求同一表的写锁,MySQL如何处理呢?答案是写进程先获得锁。不仅如此,即使读请求先到锁等待队列,写请求后 到,写锁也会插到读锁请求之前!这是因为MySQL认为写请求一般比读 请求要重要。这也正是MyISAM表不太适合于有大量更新操作和查询操作应用的原 因,因为,大量的更新操作会造成查询操作很难获得读锁,从而可能永远阻塞。这种情况有时可能会变得非常糟糕!幸好我们可以通过一些设置来调节MyISAM 的调度行为。通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利。通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低。通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级。虽然上面3种方法都是要么更新优先,要么查询优先的方法,但还是可以用其来解决查询相对重要的应用(如用户登录系统)中,读锁等待严重的问题。另外,MySQL也提供了一种折中的办法来调节读写冲突,即给系统参数max_write_lock_count设置一个合适的值,当一个表的读锁达到这个值后,MySQL就暂时将写请求的优先级降低,给读进程一定获得锁的机会。
上面已经讨论了写优先调度机制带来的问题和解决办法。这 里还要强调一点:一些需要长时间运行的查询操作,也会使写进程“饿死”!因此,应用中应尽量避免出现长时间运行的查询操作,不要总想用一条SELECT语 句来解决问题,因为这种看似巧妙的SQL语句,往往比较复杂,执行时间较长,在可能的情况下可以通过使用中间表等措施对SQL语句做一定的“分解”,使每 一步查询都能在较短时间完成,从而减少锁冲突。如果复杂查询不可避免,应尽量安排在数据库空闲时段执行,比如一些定期统计可以安排在夜间执行。
MyIASM表在不同的平台上二进制层可移植。
MyIASM拥有更大的键码尺寸,更大的键码上限。
对于MyISAM存储引擎来说,它的读锁和写锁是互斥的,从而读写操作是串行的。那么,一个进程请求某个 MyISAM表的读锁,同时另一个进程也请求同一表的写锁,MySQL如何处理呢?答案是写进程先获得锁。不仅如此,即使读请求先到锁等待队列,写请求后 到,写锁也会插到读锁请求之前!这是因为MySQL认为写请求一般比读 请求要重要。这也正是MyISAM表不太适合于有大量更新操作和查询操作应用的原 因,因为,大量的更新操作会造成查询操作很难获得读锁,从而可能永远阻塞。这种情况有时可能会变得非常糟糕!幸好我们可以通过一些设置来调节MyISAM 的调度行为。通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利。通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低。通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级。虽然上面3种方法都是要么更新优先,要么查询优先的方法,但还是可以用其来解决查询相对重要的应用(如用户登录系统)中,读锁等待严重的问题。另外,MySQL也提供了一种折中的办法来调节读写冲突,即给系统参数max_write_lock_count设置一个合适的值,当一个表的读锁达到这个值后,MySQL就暂时将写请求的优先级降低,给读进程一定获得锁的机会。
上面已经讨论了写优先调度机制带来的问题和解决办法。这 里还要强调一点:一些需要长时间运行的查询操作,也会使写进程“饿死”!因此,应用中应尽量避免出现长时间运行的查询操作,不要总想用一条SELECT语 句来解决问题,因为这种看似巧妙的SQL语句,往往比较复杂,执行时间较长,在可能的情况下可以通过使用中间表等措施对SQL语句做一定的“分解”,使每 一步查询都能在较短时间完成,从而减少锁冲突。如果复杂查询不可避免,应尽量安排在数据库空闲时段执行,比如一些定期统计可以安排在夜间执行。
- myisam不适合大量更新操作
- SharedPreference为什么不适合存储大量数据
- 基金不适合进行频繁操作
- AJAX异步不适合操作频繁的功能块
- java线程池的使用,实现大量数据的更新操作
- 不适合O/R映射的持久化操作情况
- 为什么Android的AsyncTask不适合执行长时间操作的任务
- 为什么Android的AsyncTask不适合执行长时间操作的任务
- 为什么Android的AsyncTask不适合执行长时间操作的任务
- MyISAM
- MyISAM
- MyISAM
- sql server 大量数据操作
- 处理大量数据并发操作
- MongoDB条件大量删除操作
- 网页和源码还有电子书大量更新
- 分批更新大量数据,避免锁表
- Oracle优化:大量数据插入或更新
- Fuse用户空间文件系统安装学习笔记(ver2.7.3 red hat)
- 文献阅读
- JSF,第二代Java页面技术
- 收藏的网页-DotNet
- curl 下载repo脚本出错以及下载android 源码
- myisam不适合大量更新操作
- JAVA学习(十二)__关于JAVA代码里黄色警告线的注意方法(自己整理)
- 如何从内核空间调用用户空间程序
- 写css给一个表table做边框
- ARM寄存器中a1、ip的含义 ARM寄存器的别名
- 输出下列图形 * *** ***** *******
- Matlab 使用栈判断括号是否匹配
- 常见的cpu型号的术语
- 手机端GSP地图的定位 并且在网页上显示地图的轨迹