在AWS EC2 服务器中,操作系统:amzn2-ami-kernel-5.10 x86_64
尝试诊断 cron 脚本运行缓慢的问题,发现每天有一行命令需要运行一个多小时。
mysql --login-path=something -DdDB --quick --skip-column-names --batch -e "set @var1=${VAR1}; set @var2='${VAR2}'; source sql.sql;" | tr '\t' ',' | tr -d '|' | sed 's/$/\r/' | sed 's/\\\\N/\\N/g' > "/mnt/somepath"
但是,当使用运行脚本的同一帐户运行完全相同的命令时,所花费的时间不超过 10 秒。
是否有任何可能的原因导致这种情况发生?例如,从 crontab 触发的脚本运行命令所花的时间比从命令行运行命令所花的时间长得多?
答案1
事实证明,我没有重新创建确切的命令。问题中显示的是脚本,我运行的命令试图避免 var 替换
mysql --login-path=something -DdDB --quick --skip-column-names --batch -e "source sql_hardcoded_value.sql;" | tr '\t' ',' | tr -d '|' | sed 's/$/\r/' | sed 's/\\\\N/\\N/g' > "/mnt/somepath"
没有会话变量作为参数。这极大地提高了性能。