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