我们有一个无法跟踪且不断运行多次的选择语句`SELECT `e`.*, IF(at_status.value_id > 0, at_status.value, at_status_default.value) AS `status`, `at_visibility`.`
我们有一个无法跟踪且不断运行多次的选择语句
`SELECT `e`.*, IF(at_status.value_id > 0, at_status.value, at_status_default.value) AS `status`, `at_visibility`.`value` AS `visibility` FROM `catalog_product_entity` AS `e` INNER JOIN `catalog_product_entity_int` AS `at_status_default` ON (`at_status_default`.`entity_id` = `e`.`entity_id`) AND (`at_status_default`.`attribute_id` = '97') AND `at_status_default`.`store_id` = 0 LEFT JOIN `catalog_product_entity_int` AS `at_status` ON (`at_status`.`entity_id` = `e`.`entity_id`) AND (`at_status`.`attribute_id` = '97') AND (`at_status`.`store_id` = 1) INNER JOIN `catalog_product_entity_int` AS `at_visibility` ON (`at_visibility`.`entity_id` = `e`.`entity_id`) AND (`at_visibility`.`attribute_id` = '99') AND (`at_visibility`.`store_id` = 0) WHERE ((`e`.`updated_at` >= '2024-07-09T10:51:55')) AND ((`e`.`updated_at` < '2024-07-09T12:13:10')) ORDER BY `e`.`updated_at` ASC LIMIT 50`
不同之处在于每次更新时它们都不会完成每次运行的进一步实例
关于我们如何追踪并阻止此类事件发生,您有什么想法吗?
我们尝试重建索引、禁用 cron 作业、截断数据库表、重置 mview_states 等等
当您使用 Ubuntu 时,另一种方法是使用 r2u
。 这有几个优点,如文档中所述:
- Full integration with
apt
,因为每个二进制文件都会解析 所有 依赖项:不再需要安装(预建档案)才发现缺少共享库。不再有意外。- Full integration with
apt
这样系统库的更新就不会破坏 R 包:如果 CRAN 使用(共享)库,包管理器就会知道,并且不会将其删除。(系统)库更新不会再破坏(R 包)。- 比一些替代方案 更简单、更轻便, 运行时 库包作为依赖项安装(而不是通常更重的 开发 包)。
- 由于包管理层的存在, 安装变得快速、自动化和可逆
实际上,这意味着您不需要费心完成所有 apt install libssl-dev
步骤,因为您可以从 docker 镜像开始 r2u
,然后添加所需的任何包。这意味着您的 Dockerfile
操作会简单得多,而且您不会发现自己缺少重要的系统库。
这可以通过三个文件完成:
Dockerfile
.
install.r
.
pkgs_to_install.txt
Dockerfile
这看起来像:
FROM eddelbuettel/r2u:noble
WORKDIR /r
COPY install.r .
COPY pkgs_to_install.txt .
ENV TZ=Europe/London
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN Rscript install.r
您可能希望将时区设置为您所在的地区。
pkgs_to_install.txt
列出您想要安装的软件包。对于您的情况,可能是:
dplyr
ggplot2
ggpubr
BiocManager
install.r
您可以在其中包含任何您想要定制的 R 配置文件,包括安装包:
pkgs_to_install <- readLines("./pkgs_to_install.txt")
install.packages("remotes")
remotes::install_github("REditorSupport/languageserver") # to prevent vscode warnings
Sys.setenv(R_INSTALL_STAGED = FALSE) # prevents occasional 00LOCK permissions issues
for (pkg in pkgs_to_install) {
try(install.packages(pkg))
}
我的实际设置稍微复杂一些。我有一个额外的 R 脚本,它在最后运行,对 R 配置文件进行了一些小的更改,并将输出写入 installed.packages()
csv,因此可以清楚地知道每个包的哪个版本安装在容器中。
不过,总体而言,使用此工作流程可以轻松添加任何您喜欢的功能。它还应避免某些软件包所需的各种 C++ 库所带来的依赖性噩梦。此外,由于所有软件包都是从预编译的二进制文件而不是源代码安装的,因此 构建速度要快得多 。
由于这个答案可能看起来非常热心,我或许应该补充一点,除了作为用户之外,我 r2u
与它的 docker 容器没有任何关系。