Add index on db "allocated" columns
ml2_vxlan_allocations, ml2_gre_allocations, ml2_vlan_allocations tables have the 'allocated' field. There are a lot of similar queries to these tables which look like the following: SELECT ml2_vxlan_allocations.vxlan_vni AS ml2_vxlan_allocations_vxlan_vni, ml2_vxlan_allocations.allocated AS ml2_vxlan_allocations_allocated FROM ml2_vxlan_allocations WHERE ml2_vxlan_allocations.allocated = 0 LIMIT 1; Performing such selects can take quite a lot of time and if a transaction which performs allocation is executed in parallel, it can lead to allocation failure and retry. Adding an index on "allocated" column significantly improves the performance. For ml2_vlan_allocations table created an index on (physical_network, allocation) together. Example for MySQL for execution of query select * from ml2_vxlan_allocations where allocated = 0; when on the table with ~3 mln entries, ~500K of which have allocated = 0: +-----------------------+---------------------+ |No index on "allocated"| Index on "allocated"| +---------------------------------------------+ | 2.02 sec | 0.43 sec | +-----------------------+---------------------+ Closes-Bug: #1412348 Change-Id: Ie90ba611dcae6bd0cb7686a0c7b29b9484eae693
This commit is contained in:
parent
08438a6d36
commit
f72b07e5d1
|
@ -0,0 +1,50 @@
|
|||
# Copyright 2015 OpenStack Foundation
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
"""Add index on allocated
|
||||
|
||||
Revision ID: 26b54cf9024d
|
||||
Revises: 41662e32bce2
|
||||
Create Date: 2015-01-20 15:49:46.100172
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '26b54cf9024d'
|
||||
down_revision = '2a1ee2fb59e0'
|
||||
|
||||
from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.create_index(
|
||||
op.f('ix_ml2_gre_allocations_allocated'),
|
||||
'ml2_gre_allocations', ['allocated'], unique=False)
|
||||
op.create_index(
|
||||
op.f('ix_ml2_vxlan_allocations_allocated'),
|
||||
'ml2_vxlan_allocations', ['allocated'], unique=False)
|
||||
op.create_index(
|
||||
op.f('ix_ml2_vlan_allocations_physical_network_allocated'),
|
||||
'ml2_vlan_allocations', ['physical_network', 'allocated'],
|
||||
unique=False)
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_index(op.f('ix_ml2_vxlan_allocations_allocated'),
|
||||
table_name='ml2_vxlan_allocations')
|
||||
op.drop_index(op.f('ix_ml2_gre_allocations_allocated'),
|
||||
table_name='ml2_gre_allocations')
|
||||
op.drop_index(op.f('ix_ml2_vlan_allocations_allocated'),
|
||||
table_name='ml2_vlan_allocations')
|
|
@ -1 +1 @@
|
|||
2a1ee2fb59e0
|
||||
26b54cf9024d
|
||||
|
|
|
@ -47,7 +47,7 @@ class GreAllocation(model_base.BASEV2):
|
|||
gre_id = sa.Column(sa.Integer, nullable=False, primary_key=True,
|
||||
autoincrement=False)
|
||||
allocated = sa.Column(sa.Boolean, nullable=False, default=False,
|
||||
server_default=sql.false())
|
||||
server_default=sql.false(), index=True)
|
||||
|
||||
|
||||
class GreEndpoints(model_base.BASEV2):
|
||||
|
|
|
@ -61,6 +61,10 @@ class VlanAllocation(model_base.BASEV2):
|
|||
"""
|
||||
|
||||
__tablename__ = 'ml2_vlan_allocations'
|
||||
__table_args__ = (
|
||||
sa.Index('ix_ml2_vlan_allocations_physical_network_allocated',
|
||||
'physical_network', 'allocated'),
|
||||
model_base.BASEV2.__table_args__,)
|
||||
|
||||
physical_network = sa.Column(sa.String(64), nullable=False,
|
||||
primary_key=True)
|
||||
|
|
|
@ -53,7 +53,7 @@ class VxlanAllocation(model_base.BASEV2):
|
|||
vxlan_vni = sa.Column(sa.Integer, nullable=False, primary_key=True,
|
||||
autoincrement=False)
|
||||
allocated = sa.Column(sa.Boolean, nullable=False, default=False,
|
||||
server_default=sql.false())
|
||||
server_default=sql.false(), index=True)
|
||||
|
||||
|
||||
class VxlanEndpoints(model_base.BASEV2):
|
||||
|
|
Loading…
Reference in New Issue