Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update technical note for Object Cache with Drupal #9051

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 22 additions & 16 deletions source/content/addons/object-cache/howto/drupal.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,26 @@ contributors: [cityofoaksdesign, carolynshannon, jms-pantheon, whitneymeredith]

</Alert>

<Accordion title="Database Cleanup (recommended)" id="database-cleanup-drupal" icon="lightbulb">

After enabling Redis, there are cache tables in the database that are no longer being used. Even when the Drupal cache is cleared, these tables will not be emptied. For sites that were live for awhile before Redis was enabled, there could be significant amounts of data in these tables. Removing this data could increase the speed of cloning, exporting, and backing up the database.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ccharlton are these tables not emptied by regular cache clears? I see the logic in emptying them, but I'm surprised we need to specify direct sql queries.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are instances where stale data has snagged customers on setup. Moving the tip to recommended but not required seemed more appropriate than leaving it as optional.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But does the stale data get removed with a cache clear? I would rather recommending to customer that they click the cache clear button than they figure out (perhaps for the first time) how to directly run mysql commands against Pantheon.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ccharlton, can you respond here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@stevector and @ccharlton after Redis is enabled on a site, truncating the cache tables / bins that have moved to Redis storage is a required step and is not automatically done by enabling the Redis module, running drush cr, or clicking the cache clear button in the Pantheon dashboard. This is currently not documented in a stable release of the Redis module: https://www.drupal.org/project/redis/issues/3177375

If this step is skipped once Redis is enabled, the result is race conditions when invalidating cache which are incredibly difficult to diagnose and can result in very strange issues on the site - eg config appears to revert to old values after running a drush config:import after a deployment. The most failsafe approach is to just truncate all cache* tables which can be done with a direct mysql query, or via drush:

# Get a list of all cache tables
CACHETABLES="$(terminus drush <site>.<env> -- sql:query "SHOW TABLES LIKE 'cache%';")"

# Trucate each cache table in a loop to avoid resource contention and potential deadlocks.

for table in $CACHETABLES; do
    terminus drush <site>.<env> -- sql:query "TRUNCATE TABLE $table;"
done


1. [Connect directly to MySQL](/guides/mariadb-mysql/mysql-access) and run the command below to view the cache:

```sql
SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'cache%' AND table_name != 'cache_form';
```

This returns a list of all the cache tables in the database. These are safe to empty, but don't remove the tables themselves in case Redis is disabled in the future.

1. Run the command below on each table, replacing `<tablename>` with the name of the cache table, to empty the cache:

```sql
TRUNCATE TABLE `<tablename>`;
```

</Accordion>

## Drupal 7

<Alert title="Note" type="info">
Expand Down Expand Up @@ -168,23 +188,9 @@ This configuration uses the `Redis_CacheCompressed` class for better performance

1. Visit `/admin/config/development/performance/redis` and open **Connection Information** to verify the connection.

<Accordion title="Database Cleanup (optional)" id="database-cleanup-d7" icon="lightbulb">

After enabling Redis, there are cache tables in the database that are no longer being used. Even when the Drupal cache is cleared, these tables will not be emptied. For sites that were live for awhile before Redis was enabled, there could be significant amounts of data in these tables. Removing this data could increase the speed of cloning, exporting, and backing up the database.

1. [Connect directly to MySQL](/guides/mariadb-mysql/mysql-access) and run the command below to view the cache:

```sql
SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'cache%' AND table_name != 'cache_form';
```

This returns a list of all the cache tables in the database. These are safe to empty, but don't remove the tables themselves in case Redis is disabled in the future.
<Accordion title="Database Cleanup (recommended)" id="database-cleanup-d7" icon="lightbulb">

1. Run the command below on each table, replacing `<tablename>` with the name of the cache table, to empty the cache:

```sql
TRUNCATE TABLE `<tablename>`;
```
After enabling Redis, there are cache tables in the database that are no longer being used. Refer to the "Database Cleanup" section above for steps on how to truncate the existing cache tables to make sure the latest data populates object cache properly.

</Accordion>

Expand Down
Loading