CPU Performance Issues
Bluehost uses a CPU protection system on our shared servers.
- What is CPU protection?
- How can you troubleshoot performance issues?
- Simple steps you can do to fix database issues
- Advanced steps you can do to fix database issues
What is CPU Protection?
Bluehost employs a system that monitors server resources like the CPU and memory. It makes sure that every user on a shared server gets their fair share of the system resources. It also prevents other users from causing performance issues for other accounts. This system is in place on our shared servers so that each user has the least chance of being affected by issues cause by another user. If a user is found to be abusing the server and it is somehow affecting other customers we will identify the user and take corrective action. This sometimes means suspending the user. Dedicated and VPS servers do not have this protection system.
Performance issues and Suspensions are usually caused by:
- Poorly coded PHP scripts such as multiple nested loops, or infinite loops.
- Themes, Addons, or Plugins (if you just added a new component to your script, you may want to remove it to see if that new component caused your site to suddenly perform slowly)
- Queries that return inordinately large dataset results (eg: 100,000 records) in the response object of a round trip to the server.
- Queries that take too long to execute due to heavy aggregation commands like SUM, COUNT over very large datasets without proper indexing.
- Queries that are doing complex unoptimized nested joins.
- Queries that execute large batch commands like INSERTS, UPDATES, OR DELETES - these types of SQL calls are 10 times more expensive and resource intensive than the SELECT query command.
- DDoS Attacks
- Any process that uses too much memory, like a rogue cron job
- Too many simultaneous connections like Downloads, FTP, IMAP, or PHP
How can you troubleshoot performance issues?
The MySQL Slow Queries log can help determine which queries or scripts are unoptimized. Login into Bluehost's cPanel. Look for the section called "Files" and click the icon called "File Manager". Start in the "Home Directory", choose Show Hidden Files, and then click Go. Once in the File Manager, look on the right side for a folder called "tmp" and navigate into that folder. Once inside the tmp folder, find a folder called "mysql_slow_queries". Navigate inside that folder.
Look for the files with recent dates and right-click on one of those files and choose "Code Edit". This will show the log details. Look for the logs where the Query_time is over 2 seconds. Queries that take over 2 seconds to execute usually need to be re-factored.
These logs are generated to help troubleshoot database programming queries that are not optimized. Locate the query and database causing the problem, then optimize the query or queries by re-writing the query, creating an appropriate Database Index, repairing any damaged databases, etc. If you are not familiar with database programming, you may need to seek help from your web developer/programmer.
We strongly recommend that you backup your databases before working on them.
What are some simple steps you can perform to try to fix your database issues?
- You can run a repair on all your databases. In the cPanel, click on the MySQL Databases icon and in the Repair section, choose a database to repair. You can safely run a Check and Repair routine on all of your databases.
- You can try to optimize all of your databases. In the cPanel, click the PHP MyAdmin icon. On the next screen, choose a database name from the left side column. When the tables appear on the main screen, scroll to the bottom and click the link "Select All". Next, use the drop-down menu, and on the bottom, choose the "Optimize" option. You can perform this optimize routine to all of the tables in all of your databases.
Performing these two simple steps will not harm your important data as these steps above are non-intrusive maintenance routines. As such, they may not fix the core issue as well. For instance, if you have severe data corruption, it can cause your queries to time out before they fully execute. Data corruption can be difficult to detect, and repair. Database corruption can occur if a database operation did not completely succeed. Partial data is a form of corruption which can break Referential Integrity, causing your web application to fail also. In short, the free Repair or Optimization routines that were just mentioned may not be sufficient to fix severe database corruption.
What are some Advanced Steps that you can perform on your databases?
- You can download your websites onto your own local machine and create a local web development environment to test your sites. You can then set Break Points in your scripts and watch your computer's CPU performance as you step through your stack and heap. Try to stress test your queries as well to see how they respond under a load.
- You can empty tables that are merely statistic tables. When viewing your tables, you can see how many entries each one has and how many KB or MB it is using. Sometimes tables get thousands or millions of entries that just log statistical type of data, like what searches people have done on your site or what people have logged in, etc. If you have very large statistic tables, it may help optimize your site if you remove the records or rows within those tables. Warning: you should always consult the vendor of your scripts, or your web developer, before you attempt this - deleting any data in your database can potentially break your web application.
- You can ask our team to restore a courtesy system backup if we have one on file for you. The system backup is a snapshot of exactly how your site performed on a certain date. Doing a restore will not guarantee that your sites will be fixed, as your core issue may have existed at the time our System Backup Tool created your backup. Rolling back to a system backup will restore all of your sites, and not just a portion. Feel free to contact us to see if we have a System Backup available.
- You can also ask us to do a full Reset of your account. This will delete everything on your account like it was on day one when you first signed up with us. Your account would be empty, containing no files, databases, email accounts etc. This would ensure a fresh start so that you can re-install all of your scripts with clean installations and clean databases. If you think that this is an option for you, please create backups of your data first.