mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	CLOUDSTACK-8606: DB performance impacted due to VM sync.
VM sync. generates a lot of queries on vm_instance table with 'instance_name' as filter. Since the field is not indexed, these kind of queries will impact DB performance. Added an index for instance_name field. This closes #553
This commit is contained in:
		
							parent
							
								
									96ad6f6ccd
								
							
						
					
					
						commit
						f138192c94
					
				| @ -22,6 +22,8 @@ import java.sql.Connection; | |||||||
| import java.sql.PreparedStatement; | import java.sql.PreparedStatement; | ||||||
| import java.sql.ResultSet; | import java.sql.ResultSet; | ||||||
| import java.sql.SQLException; | import java.sql.SQLException; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
| 
 | 
 | ||||||
| import org.apache.log4j.Logger; | import org.apache.log4j.Logger; | ||||||
| 
 | 
 | ||||||
| @ -59,6 +61,7 @@ public class Upgrade452to460 implements DbUpgrade { | |||||||
|     @Override |     @Override | ||||||
|     public void performDataMigration(final Connection conn) { |     public void performDataMigration(final Connection conn) { | ||||||
|         updateVMInstanceUserId(conn); |         updateVMInstanceUserId(conn); | ||||||
|  |         addIndexForVMInstance(conn); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void updateVMInstanceUserId(final Connection conn) { |     public void updateVMInstanceUserId(final Connection conn) { | ||||||
| @ -136,6 +139,22 @@ public class Upgrade452to460 implements DbUpgrade { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     private void addIndexForVMInstance(Connection conn) { | ||||||
|  |         // Drop index if it exists | ||||||
|  |         List<String> indexList = new ArrayList<String>(); | ||||||
|  |         s_logger.debug("Dropping index i_vm_instance__instance_name from vm_instance table if it exists"); | ||||||
|  |         indexList.add("i_vm_instance__instance_name"); | ||||||
|  |         DbUpgradeUtils.dropKeysIfExist(conn, "vm_instance", indexList, false); | ||||||
|  | 
 | ||||||
|  |         // Now add index | ||||||
|  |         try (PreparedStatement pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`vm_instance` ADD INDEX `i_vm_instance__instance_name`(`instance_name`)");) { | ||||||
|  |             pstmt.executeUpdate(); | ||||||
|  |             s_logger.debug("Added index i_vm_instance__instance_name to vm_instance table"); | ||||||
|  |         } catch (SQLException e) { | ||||||
|  |             throw new CloudRuntimeException("Unable to add index i_vm_instance__instance_name to vm_instance table for the column instance_name", e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public File[] getCleanupScripts() { |     public File[] getCleanupScripts() { | ||||||
|         final String script = Script.findScript("", "db/schema-452to460-cleanup.sql"); |         final String script = Script.findScript("", "db/schema-452to460-cleanup.sql"); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user