sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLの隠された機能

    postgresはMySQLよりもはるかに正気なので、報告する「トリック」はそれほど多くありません;-)

    マニュアルには、パフォーマンスに関する優れたヒントがいくつかあります。

    覚えておくべき他のいくつかのパフォーマンス関連事項:

    • 自動真空がオンになっていることを確認してください
    • postgres.conf(有効なキャッシュサイズ、共有バッファ、作業メモリ...調整するための多くのオプション)を確認してください。
    • pgpoolまたはpgbouncerを使用して、「実際の」データベース接続を最小限に抑えます
    • EXPLAINおよびEXPLAINANALYZEがどのように機能するかを学びます。出力の読み方を学びます。
    • CLUSTERは、ディスク上のデータをインデックスに従ってソートします。大きな(ほとんど)読み取り専用テーブルのパフォーマンスを劇的に向上させることができます。クラスタリングは1回限りの操作です。その後、テーブルが更新されても、変更はクラスタリングされません。

    構成やパフォーマンス自体に関係のない、便利だと思ったことがいくつかあります。

    現在何が起こっているかを確認するには:

    select * from pg_stat_activity;
    

    その他の機能の検索:

    select * from pg_proc WHERE proname ~* '^pg_.*'
    

    データベースのサイズを見つける:

    select pg_database_size('postgres');
    select pg_size_pretty(pg_database_size('postgres'));
    

    すべてのデータベースのサイズを検索する:

    select datname, pg_size_pretty(pg_database_size(datname)) as size
      from pg_database;
    

    テーブルとインデックスのサイズを見つける:

    select pg_size_pretty(pg_relation_size('public.customer'));
    

    または、すべてのテーブルとインデックスを一覧表示するには(おそらく、これを表示する方が簡単です):

    select schemaname, relname,
        pg_size_pretty(pg_relation_size(schemaname || '.' || relname)) as size
      from (select schemaname, relname, 'table' as type
              from pg_stat_user_tables
            union all
            select schemaname, relname, 'index' as type
              from pg_stat_user_indexes) x;
    

    ああ、トランザクションをネストしたり、部分的なトランザクションをロールバックしたりできます++

    test=# begin;
    BEGIN
    test=# select count(*) from customer where name='test';
     count 
    -------
         0
    (1 row)
    test=# insert into customer (name) values ('test');
    INSERT 0 1
    test=# savepoint foo;
    SAVEPOINT
    test=# update customer set name='john';
    UPDATE 3
    test=# rollback to savepoint foo;
    ROLLBACK
    test=# commit;
    COMMIT
    test=# select count(*) from customer where name='test';
     count 
    -------
         1
    (1 row)
    


    1. SQLiteの英数字を含む行を返す

    2. EntityFramework6の動的MySQLデータベース接続

    3. SQL Serverに保存すると、DateTimeのミリ秒が変更されます

    4. ハイブリッドクラウドセットアップでのMariaDBの実行