8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Magento 2.4.6 选择查询消耗所有资源 cron 作业

Mikkel 2月前

94 0

我们有一个无法跟踪且不断运行多次的选择语句`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 等等

帖子版权声明 1、本帖标题:Magento 2.4.6 选择查询消耗所有资源 cron 作业
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mikkel在本站《ubuntu》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我有一台 Ubuntu 22.04 服务器,上面运行着 docker,我正在努力让它更新。系统有 docker 源列表文件,它工作正常,因为它返回一个 HTTP

    我有一台 Ubuntu 22.04 服务器,上面运行着 docker,我正在努力让它进行 apt-get 更新。系统有 docker 源列表文件,它工作正常,因为它返回 HTTP 请求。我可以对 archive.ubuntu.com 执行 wget,它返回 TCP 端口 80 连接但没有 HTTP 响应。我可以正常 ping 存档以及 google.co.uk,但我无法进一步弄清楚它为什么不工作。我知道这不是网络防火墙,因为这个子网上还有其他 ubuntu 服务器连接正常,所以唯一的区别是这台服务器是 docker。

    我尝试了以下方法:

    将名称服务器从 8.8.8.8 替换为 8.8.4.4 甚至 1.1.1.1,更新日期时间以确保其正确无误。将镜像替换为 https 甚至美国的镜像。关闭 docker 服务并关闭桥接接口。用许可证替换任何 IPTables 配置。

    这一切让我很困惑。

    任何值得尝试的想法都将受到赞赏。

  • 您好,您能添加一张执行 apt-get update 时发生的情况的截图吗?您添加了有用的信息,但查看 apt-get 抛出的确切错误会很有帮助。

  • 嗨,Eytan,如果我可以上传的话,我会在早上给你截一张截图,但更新显示:0% 正在等待标题。然后大约十分钟后,它抛出错误:连接失败:

  • 我尝试使用 Apptainer 构建一个 docker 容器。我有一长串要安装特定版本的 R 包。我需要直接从 CRAN/BioConductor 安装它,而不是从...

    我尝试使用 Apptainer 构建一个 docker 容器。我有一长串要安装特定版本的 R 包。我需要直接从 CRAN/BioConductor 安装它,而不是从 conda 安装。现在,对于我尝试安装的每个包,我可能会因为缺少库而遇到障碍,然后不得不返回并使用 apt install 添加它。这成为一个迭代过程,需要很长时间。有没有一种交互式的方式来构建容器。我尝试使用 sandbox 和 fakeroot,但在安装系统库时它没有获得完整的写入功能。我还可以集成什么其他解决方案?

    Bootstrap: docker
    From: ubuntu:22.04
    %labels
        Author author_name
        version v0.1
    
    %post 
        export DEBIAN_FRONTEND=noninteractive
        
        # Update system and install requirements
        apt-get -qq update
        
    
        apt -y install build-essential gfortran curl cmake pkg-config zip unzip \
                       libglib2.0-0 libpango-1.0-0 libpangocairo-1.0-0 libpaper-utils \
                       libtcl8.6 libtk8.6 libxt6 lmod 
        
        apt -y install libbz2-dev libicu-dev liblzma-dev libopenblas-dev libpq-dev \
                       libpcre2-dev zlib1g-dev libssl-dev libudunits2-dev libncurses-dev libcairo2-dev \
                       libsodium-dev libmariadb-dev libcurl4-openssl-dev libssh2-1-dev libxml2-dev \
                       libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev libfontconfig1-dev \
                       libharfbuzz-dev libfribidi-dev liblapack-dev libgit2-dev libmagick++-dev 
        
        
        curl -o /tmp/libicu60_60.2-3ubuntu3.2_amd64.deb http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu60_60.2-3ubuntu3.2_amd64.deb
        dpkg -i /tmp/libicu60_60.2-3ubuntu3.2_amd64.deb
    
      
        # Install R with all recommended 
        export R_VERSION=4.2.2
        curl -o /tmp/r-${R_VERSION}_1_amd64.deb https://cdn.rstudio.com/r/ubuntu-2204/pkgs/r-${R_VERSION}_1_amd64.deb
        dpkg -i /tmp/r-${R_VERSION}_1_amd64.deb
    
        ln -s /opt/R/${R_VERSION}/bin/R /usr/local/bin/R
        ln -s /opt/R/${R_VERSION}/bin/Rscript /usr/local/bin/Rscript
    
    
        # Install the R packages
        
        R -e 'install.packages("remotes", dependencies = TRUE, repos = c("https://cloud.r-project.org/", "http://rforge.net/"))'
        R -e 'remotes::install_version(package = "BiocManager", version = "1.30.22", dependencies = TRUE, repos = c("https://cloud.r-project.org/", "http://rforge.net/"), upgrade = "never")'
    
        R -e 'remotes::install_version(package = "dplyr", version = "1.1.4", dependencies = TRUE, repos = c("https://cloud.r-project.org/", "http://rforge.net/"), upgrade = "never")' 
        R -e 'remotes::install_version(package = "ggplot2", version = "3.5.1", dependencies = TRUE, repos = c("https://cloud.r-project.org/", "http://rforge.net/"), upgrade = "never")'  ##### downgraded to 3.4.3
        R -e 'remotes::install_version(package = "ggpubr", version = "0.6.0", dependencies = TRUE, repos = c("https://cloud.r-project.org/", "http://rforge.net/"), upgrade = "never")' 
    
  • 谢谢 Eytan,最后最奇怪的是,Ubuntu 似乎阻止了我的 IP 连接,或者它不知何故被破坏了。我得到了一个 tcp 会话,因为我可以在 wget 中看到它,但我没有得到 http 响应。从我的 ISP 请求新的 IP 解决了这个问题。

  • 根据我的经验,安装 R / Py 包、发现缺少的系统包、安装系统包并再次尝试的迭代实践是不可避免的!

    我同意交互式开发和测试更容易。这可以通过 docker run --rm -ti [image name] bash 从构建的镜像中获取 bash shell 接口来实现。

    如果容器已经使用不同的语句运行, docker exec 那么也是可能的 CMD

    然后,您可以使用 启动 R 控制台, $ R 然后尝试 > install.packages() 。如果它抱怨系统包, > quit() 请执行 $ apt get install ... 或任何适合您操作系统的操作。然后再试一次。

    最后,将您发现的所有必要的包安装命令添加到您的 Dockerfile 中。

    docker build -t my_image .
    docker run --rm -ti my_image bash
    
  • 如果镜像正在运行,则命令与 docker exec 相同,例如 docker exec -it [镜像名称] bash。此外,如果您希望能够运行 sudo 命令,有时添加 -u root 很有用。但是,我认为这种工作流程不再是不可避免的,至少在 Ubuntu 上是这样。自从我切换到 r2u 后,我就不需要这样做了。

  • 使用已编译的二进制文件

    当您使用 Ubuntu 时,另一种方法是使用 r2u 。 这有几个优点,如文档中所述:

    • Full integration with apt ,因为每个二进制文件都会解析 所有 依赖项:不再需要安装(预建档案)才发现缺少共享库。不再有意外。
    • Full integration with apt 这样系统库的更新就不会破坏 R 包:如果 CRAN 使用(共享)库,包管理器就会知道,并且不会将其删除。(系统)库更新不会再破坏(R 包)。
    • 比一些替代方案 更简单、更轻便, 运行时 库包作为依赖项安装(而不是通常更重的 开发 包)。
    • 由于包管理层的存在, 安装变得快速、自动化和可逆

    实际上,这意味着您不需要费心完成所有 apt install libssl-dev 步骤,因为您可以从 docker 镜像开始 r2u ,然后添加所需的任何包。这意味着您的 Dockerfile 操作会简单得多,而且您不会发现自己缺少重要的系统库。

    怎么运行的

    这可以通过三个文件完成:

    1. Dockerfile .
    2. install.r .
    3. 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 容器没有任何关系。

  • 如上所述,这个 install.packages() 用于安装软件包的最新版本。如果我需要指定特定版本,install_version() 的性能如何?

  • @ArindamGhosh 这是个好问题 - 我还没有尝试过。我认为你会失去与包管理系统对齐的大部分好处。我认为更好的方法是从 docker 标签中选择 20.04 标签,然后你应该得到正确的包版本。但我还没有在旧版本的 R 上尝试过这种方法,所以我不太确定 - 如果你尝试一下,请提供更新,因为它可能会对正在研究这个问题的其他人有所帮助。

返回
作者最近主题: