We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 40165
    • 2 Posts
    Hello,

    We have created a websitein modx that should receive 25k visitors a day.

    We have an array of PHP servers but 1 mysql server. So we need to ensure that all calls to the db are cached.

    What I have tried with modx.
    1) Turned on cache_db in systems settings
    Results: "Most of the db calls" are cached.
    Looking at the mysql query log, there are still calls to the modx_session table and calls to modx_access_resources_groups.

    2) To remove the session db calls.
    Turned on system settings -> Enable database session cache.
    Result: I see that the session related queries are gone. Good

    3) Remaining uncached db queries.
    My mysql log still outputs a list of queries. So not all the db queries are cached.

    For example:
    The 8 queries are always made, each return empty result set.

    SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_resource_groups` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_document_groups` ResourceGroup ON Acl.principal_class = 'modUserGroup' AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') AND ResourceGroup.document = '1' AND ResourceGroup.document_group = Acl.target GROUP BY Acl.target, Acl.principal, Acl.authority, Acl.policy

    SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_resource_groups` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_document_groups` ResourceGroup ON Acl.principal_class = 'modUserGroup' AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') AND ResourceGroup.document = '1' AND ResourceGroup.document_group = Acl.target GROUP BY Acl.target, Acl.principal, Acl.authority, Acl.policy

    SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_resource_groups` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_document_groups` ResourceGroup ON Acl.principal_class = 'modUserGroup' AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') AND ResourceGroup.document = '64' AND ResourceGroup.document_group = Acl.target GROUP BY Acl.target, Acl.principal, Acl.authority, Acl.policy

    SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_resource_groups` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_site_tmplvar_access` ResourceGroup ON Acl.principal_class = 'modUserGroup' AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') AND ResourceGroup.tmplvarid = '123' AND ResourceGroup.documentgroup = acl.target ORDER BY Acl.target, Acl.principal, Acl.authority

    SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_category` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_categories_closure` CategoryClosure ON CategoryClosure.descendant = '13' AND Acl.principal_class = 'modUserGroup' AND CategoryClosure.ancestor = Acl.target AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') ORDER BY CategoryClosure.depth DESC, target, principal, authority ASC

    SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_resource_groups` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_site_tmplvar_access` ResourceGroup ON Acl.principal_class = 'modUserGroup' AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') AND ResourceGroup.tmplvarid = '52' AND ResourceGroup.documentgroup = acl.target ORDER BY Acl.target, Acl.principal, Acl.authority

    SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_category` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_categories_closure` CategoryClosure ON CategoryClosure.descendant = '13' AND Acl.principal_class = 'modUserGroup' AND CategoryClosure.ancestor = Acl.target AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') ORDER BY CategoryClosure.depth DESC, target, principal, authority ASC

    SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_resource_groups` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_document_groups` ResourceGroup ON Acl.principal_class = 'modUserGroup' AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') AND ResourceGroup.document = '1' AND ResourceGroup.document_group = Acl.target GROUP BY Acl.target, Acl.principal, Acl.authority, Acl.policy


    Is there any way that I can completly prevent DB query for a period of time once the cache is primed.

    Any advice appreciated.

    Thanks
    Jim
      • 22303 MODX Staff
      • 10,725 Posts
      If you are not using Resource Group or Element Category access controls in your web Context, add the following Context Settings to disable these checks altogether...

      access_category_enabled = 0
      access_resource_group_enabled = 0

      Or edit the System Settings for these to disabled those checks across all Contexts (if you do not use Resource Group or Category permissions anywhere).
        • 34004
        • 125 Posts
        I have also found http://modx.com/extras/package/getcache helps a lot on DB intensive snippets.