在使用CRON作业时,如何避免数据库锁死

你在设计一个系统时犯的错误,使你在将来花费了很多钱

在设计一个大规模的应用程序时,你所犯的一些小错误让你损失惨重,而这些错误本可以通过避免一些错误来解决,这些错误包括:

1.设计一个没有外键的数据库
2.选择了错误的数据类型和它们的大小
3.使用过多的TEXT字段
4.在多个表中使用重复的数据的数据库
5.不使用索引
6.过多的连接
7.为了跟踪系统的更新,反复更新单一的列
8.对文件系统有太多的查询
9.没有建立一个机制来处理未使用的旧数据
 

避免错误/数据库锁死

当我们有预定的任务,并计划设计一个定期更新统计资料的系统时,在MySQL中使用PHP的Apache服务器工作,不要对你想定期更新的行或列使用更新查询,而要尝试使用插入查询。

1. 设计一个没有外键的数据库
我可以给你的最好建议是不要急于设计数据库。要么你的最后期限很短,要么你对这一步太粗心了,这将使你在未来花费大量的美元和时间。

花点时间,把事情想清楚,使用依赖关系,使你的数据保持一致。

处处使用外键! 如果你考虑到把它们放进去会给你带来的痛苦,或者你只是因为在删除数据时面临的删除错误而避免它们,那么再想想。

如果你正确地使用外键,删除就会变得很容易,而且在删除顶级数据库记录时几乎不会出现不相关的数据。

它还可以保护你在父表中删除一条有子记录的记录。

2. 选择错误的数据类型和它们的大小
这里的规则是不要过度。

允许的最大值是你在应用层面上决定的,而不是用户 "可以 "输入的值。记住,你总是可以在应用程序方面进行验证。

不是所有的记录都有最大值,所以不要过度。

另一个很好的例子是,在自动增量列中使用无符号的值,而这些值可能永远不会是负值。

3. 使用太多的TEXT字段
TEXT字段比较慢,varchar比较好。只有在文本非常长的时候才使用TEXT。

TEXT字段可以成为一个索引的一部分,直到一个特定的长度,varchars在这里也是更好的选择。

一条记录中太多的TEXT列会使你的数据获取速度变慢。

### 如何在云服务器配置定时任务自动杀死指定进程 为了实现这一目标,在Linux环境下可以通过`cron`作业调度器定期执行命令来查找并终止特定的进程。下面提供了一种通过编写Shell脚本来完成此操作的方法,并将其作为Cron任务部署。 #### 编写Shell脚本用于杀掉指定名称的进程 创建一个新的Shell脚本文件,命名为`kill_process.sh`: ```bash #!/bin/bash # 获取名为myprocessname的所有PID列表 PIDS=$(ps aux | grep 'myprocessname' | awk '{print $2}') if [ ! -z "$PIDS" ]; then echo "Killing processes with PIDs: ${PIDS}" # 使用kill命令结束这些进程 kill -9 $PIDS fi ``` 上述代码片段中的`myprocessname`应替换为目标程序的实际名字[^1]。请注意,这里使用了`kill -9`强制关闭进程的方式,这种方式会立即中断进程而不会给它机会清理资源或保存状态,因此仅应在必要使用。 #### 设置权限使脚本可执行 确保该脚本能被执行: ```bash chmod +x /path/to/your/script/kill_process.sh ``` #### 添加至Cron Jobs 编辑当前用户的crontab文件以安排周期性的任务执行: ```bash crontab -e ``` 向其中加入如下行(假设希望每天凌晨两点钟运行一次): ```plaintext 0 2 * * * /path/to/your/script/kill_process.sh >> /var/log/crontask.log 2>&1 ``` 这将会把每次执行的结果记录到指定的日志文件中以便日后审查[^2]。 #### 处理多实例情况下的协调问题 考虑到可能存在的并发性以及跨节点同步需求,可以考虑引入分布式机制或者利用像Redis这样的内存数据库来进行更复杂的流程管理和错误恢复逻辑设计[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值