Назад | Перейти на главную страницу

Посмотрите, сколько раз была уменьшена выделенная пропускная способность за тот же день, в таблице DynamoDB

Есть ли способ узнать, сколько раз выделенная пропускная способность была уменьшена в течение одного дня (UTC) в таблице DynamoDB?

При увеличении выделенной пропускной способности я всегда боюсь, что не смогу уменьшить ее впоследствии в тот же день, поскольку нельзя уменьшить выделенную пропускную способность в таблице DynamoDB более чем в 4 раза в течение одного дня (UTC).

Кажется, что точности графика мониторинга недостаточно, чтобы увидеть все предыдущие изменения выделенной пропускной способности, которые произошли в тот же день. Например. в этой таблице выделенная пропускная способность уменьшена в 4 раза, но на графике это не видно:

И, очевидно, Amazon не предупреждает о том, что мы увеличиваем выделенную пропускную способность, не имея возможности уменьшить ее обратно.

Количество уменьшений возвращается в виде DescribeTable результат как часть ProvisionedThroughputDescription. Похоже, что консоль DynamoDB этого не отображает, а показывает только «Время последнего уменьшения».

Если это может кому-то помочь, я написал функцию Python, чтобы увидеть, во сколько раз выделенная пропускная способность уменьшалась в течение одного дня для каждой таблицы DynamoDB:

import boto
import operator

MY_ACCESS_KEY_ID = 'copy your access key ID here'
MY_SECRET_ACCESS_KEY = 'copy your secret access key here'

def get_number_of_decreases_today():
    '''
    Scan all DynamoDB tables, and returns a dictionary with table name as key, NumberOfDecreasesToday as value.
    '''
    dynamodb_conn = boto.connect_dynamodb(aws_access_key_id=MY_ACCESS_KEY_ID, aws_secret_access_key=MY_SECRET_ACCESS_KEY)
    table_names = dynamodb_conn.list_tables()
    table_number_of_decreases_today = {}
    for table_name in table_names:
        dynamodb_table_description = dynamodb_conn.describe_table(table_name)
        table_number_of_decreases_today[table_name] = dynamodb_table_description['Table']['ProvisionedThroughput']['NumberOfDecreasesToday']
        #print('NumberOfDecreasesToday is {0} for table {1}'.format(table_number_of_decreases_today[table_name], table_name))
    return table_number_of_decreases_today

def main():
    table_number_of_decreases_today = get_number_of_decreases_today()

    # Print table names and NumberOfDecreasesToday with alphabetically ordered table names
    for key, value in sorted(table_number_of_decreases_today.items(), key=operator.itemgetter(0)):
        print('{0}\t{1}'.format(key,value))    

    # Print table names by ascending NumberOfDecreasesToday
    for key, value in sorted(table_number_of_decreases_today.iteritems(), key=lambda (k,v): (v,k)):
        print('{0}\t{1}'.format(key, value))

if __name__ == "__main__":
    main()
    #cProfile.run('main()') # if you want to do some profiling