PythonにPerltidyと同じような整形ツールがないかと探してみましたが、ありました。
試しに使ってみましたが、きれいになりました。便利なツールですね。
Oracle 11gからデフォルトセキュリティポリシーが変わっています。
Oracle Database 11gのデフォルト・セキュリティ設定 (その1)
結構しゃれにならないので、デフォルトプロファイルを変更して対処しました。
プロファイルの確認方法)
SQL> SELECT PROFILE || ',' || RESOURCE_NAME || ',' || RESOURCE_TYPE || ',' || LIMIT FROM DBA_PROFILES; PROFILE||','||RESOURCE_NAME||','||RESOURCE_TYPE||','||LIMIT -------------------------------------------------------------------------------- DEFAULT,COMPOSITE_LIMIT,KERNEL,UNLIMITED DEFAULT,SESSIONS_PER_USER,KERNEL,UNLIMITED DEFAULT,CPU_PER_SESSION,KERNEL,UNLIMITED DEFAULT,CPU_PER_CALL,KERNEL,UNLIMITED DEFAULT,LOGICAL_READS_PER_SESSION,KERNEL,UNLIMITED DEFAULT,LOGICAL_READS_PER_CALL,KERNEL,UNLIMITED DEFAULT,IDLE_TIME,KERNEL,UNLIMITED DEFAULT,CONNECT_TIME,KERNEL,UNLIMITED DEFAULT,PRIVATE_SGA,KERNEL,UNLIMITED DEFAULT,FAILED_LOGIN_ATTEMPTS,PASSWORD,10 DEFAULT,PASSWORD_LIFE_TIME,PASSWORD,180 DEFAULT,PASSWORD_LOCK_TIME,PASSWORD,1 DEFAULT,PASSWORD_GRACE_TIME,PASSWORD,7 DEFAULT,PASSWORD_REUSE_TIME,PASSWORD,UNLIMITED DEFAULT,PASSWORD_REUSE_MAX,PASSWORD,UNLIMITED DEFAULT,PASSWORD_VERIFY_FUNCTION,PASSWORD,NULL
プロファイルの変更方法は以下
SQL> ALTER profile DEFAULT limit password_life_time unlimited failed_login_attempts unlimited password_lock_time unlimited password_grace_time unlimited;
JAVAの逆コンパイラに「JD」というものがあります。
JDにはJD-GUIというものと、JD-ECLISPEという二つが存在しており、JD-IDEは逆コンパイラのGUI版、JD-ECLIPSEはECLIPSE上で動作するJDということになります。
ついこの間、ソースファイルの所在が不明となったJARファイルがあったので、JD-GUIを使って逆コンパイルしてみましたが、びっくりしました!JARファイルを与えたらあっという間に逆コンパイルが完了し、その結果をjavaファイルで出力できるという優れもので・・・
できあがったjavaファイルは、コメントアウトされて出力されますが、このコメントアウト部分をsed等で切り抜けばソースに早変わりします。
便利ですな。
なおライセンスで逆コンパイルが禁止されている場合もあるので、ご利用時はご注意ください。
メモです。
SELECT TABLE_NAME FROM DICTIONARY;
SELECT * FROM DBA_SYS_PRIVS;
コマンドSyntax
SELECT
GRANTEE || ',' || PRIVILEGE || ',' || ADMIN_OPTION
FROM
DBA_SYS_PRIVS;
SELECT
GRANTEE || ',' || GRANTED_ROLE || ',' || ADMIN_OPTION || ',' || DEFAULT_ROLE
FROM
DBA_ROLE_PRIVS;
SELECT
USERNAME || ',' || PASSWORD || ',' || ACCOUNT_STATUS || ',' || LOCK_DATE || ',' || EXPIRY_DATE || ',' || DEFAULT_TABLESPACE || ',' || TEMPORARY_TABLESPACE
FROM
DBA_USERS;
SELECT
TABLESPACE_NAME || ',' || USERNAME || ',' || BYTES || ',' || MAX_BYTES || ',' || BLOCKS || ',' || MAX_BLOCKS || ',' || DROPPED
FROM
DBA_TS_QUOTAS;
QUOTA UNLIMITEDがついている。
Windows 7上で、Windows Server 2008 R2のADで管理しているDNSサーバに対してレコードを追加出来たらいいなと思って探していたら、いいツールがありました。
このツールを使えばWindows7上でWindos Server 2008 R2/Windows Server 2008/Windows 2003 Serverの管理が出来るとのこと。インストール作業はバイナリをダブルクリックするだけでインストールされる。利用時には利用したい機能を選択する必要があるので、[コントロール パネル] ->[プログラム] -> [プログラムと機能] -> [Windows の機能の有効化または無効化] -> [リモート サーバー管理ツール]を選択して、利用するものを適宜選択します。
MySQLお勉強メモ 新機能編です。
5.5からデフォルトストレージエンジンとして利用される。5.1迄で言うInnoDB Pluginが5.5ではInnoDBと言われている。
5.1迄のInnoDBフォーマットは使える。
MySQLお勉強メモ、InnoDB編です。
ibdataはテーブル毎に分割することが可能。テーブルメンテナンスやパーティションで有効。
対応。ACID属性に準拠している。デフォルトはAUTOCOMMIT。
デフォルト分離レベルはrepeatable read。Oracleはread committed。
行ロック。完全な行レベルロックではなく、インデックスのnext_key_lock。なので、当該レコード以外の部分(中間Node等)でもロックがかかる可能性がある。
ALTER TABLE時にはテーブルロック(READ LOCK)となる。インデックスの追加・カラム定義の変更等が該当する。
innodb_buffer_poolに書き込み/読み込みデータを保管しており、定期的にibdataファイルに書き込みを行うことで、性能を向上させている。ibdataのデフォルトサイズは10MB。
また、書き込みを保証するためにREDOログとしてib_logfile0/ib_logfile1を持つ。WAL(Write Anywhare Log)であり、シーケンシャルライトで書き込む。デフォルトではLogbufferからコミット毎に書き込まれる。
Redo Logにはブロックの位置と、変更種別、変更内容が記録されている。
チェックポイントが発生したタイミングで、innodb_buffer_poolの内容とib_logfileの内容をibdataに反映する。
タイミングはib_logfileが一杯になったとき・MySQLサーバの負荷が低いときにバックグラウンドでチェックポイントが発生する。
ib_logfile0/1が小さいとチェックポイントが頻繁に発生するので、おおきくする(1-2GB程度)。
バッファのサイズを指定する。ibdataが乗るため、データ/インデックスが両方乗ることになる。OS全体の50-80%程度設定してもよい。デフォルトは8Mのため必ずおおきくしましょう。
デフォルトの1以外はトランザクション結果が失われるので、やめた方がいい。一般的に2を利用すると速度が速くなると言われているが、RAIDコントローラでライトキャッシュが存在する場合はそこまで差が出ない。
デフォルト1M。トランザクションサイズに応じて設定する。書き込み量にもよるが、1-8MB程度でよいのでは。COMMIT毎にログファイルにFLUSHされるので、アプリ要件次第だが、COMMIT間隔(1000件コミットとか)で調整した方が性能が上がる。
ib_logfileのサイズを指定する。1GB程度でどうか。小さい状態で更新量が大きいと、ログがあふれる可能性が出てくる。ただし大きすぎるとクラッシュリカバリの時間がかかる。
mysql> show variables like 'innodb_buffer_pool_size'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | innodb_buffer_pool_size | 536870912 | +-------------------------+-----------+ 1 row in set (0.00 sec)
クラッシュリカバリ時には、MySQLサーバ起動時にib_logfile0/1をディスクに反映する。ib_logfile0/1が大きいと、クラッシュリカバリに時間がかかる。
なお5.5では速度が大幅に向上している。
再起動 -> redoログ -> undoログの順番で適用する。
alter tableに時間がかかる。
OSでのwait等がわかる。
チェックポイントとREDOログファイルの関係を表示する。ib_logfileとデータファイル間の差分の大小がわかる。
チューニングに使われるポイント。重要。
mysql> show engine innodb status\G *************************** 1. row *************************** Type: InnoDB Name: Status: ===================================== 110128 13:05:02 INNODB MONITOR OUTPUT ===================================== Per second averages calculated from the last 14 seconds ----------------- BACKGROUND THREAD ----------------- srv_master_thread loops: 26396 1_second, 26395 sleeps, 2403 10_second, 2367 background, 2366 flush srv_master_thread log flush and writes: 26408 ---------- SEMAPHORES ---------- OS WAIT ARRAY INFO: reservation count 1383, signal count 1383 Mutex spin waits 1035, rounds 1339, OS waits 8 RW-shared spins 1375, rounds 41250, OS waits 1375 RW-excl spins 0, rounds 0, OS waits 0 Spin rounds per wait: 1.29 mutex, 30.00 RW-shared, 0.00 RW-excl ------------ TRANSACTIONS ------------ Trx id counter 6970F4 Purge done for trx's n:o < 6970EA undo n:o < 0 History list length 2328 LIST OF TRANSACTIONS FOR EACH SESSION: ---TRANSACTION 0, not started, OS thread id 35024326528 MySQL thread id 15842, query id 381896 localhost root show engine innodb status -------- FILE I/O -------- I/O thread 0 state: waiting for i/o request (insert buffer thread) I/O thread 1 state: waiting for i/o request (log thread) I/O thread 2 state: waiting for i/o request (read thread) I/O thread 3 state: waiting for i/o request (read thread) I/O thread 4 state: waiting for i/o request (read thread) I/O thread 5 state: waiting for i/o request (read thread) I/O thread 6 state: waiting for i/o request (write thread) I/O thread 7 state: waiting for i/o request (write thread) I/O thread 8 state: waiting for i/o request (write thread) I/O thread 9 state: waiting for i/o request (write thread) Pending normal aio reads: 0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] , ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0 Pending flushes (fsync) log: 0; buffer pool: 0 928 OS file reads, 22157 OS file writes, 11195 OS fsyncs 0.00 reads/s, 0 avg bytes/read, 0.43 writes/s, 0.43 fsyncs/s ------------------------------------- INSERT BUFFER AND ADAPTIVE HASH INDEX ------------------------------------- Ibuf: size 1, free list len 0, seg size 2, 0 merges merged operations: insert 0, delete mark 0, delete 0 discarded operations: insert 0, delete mark 0, delete 0 Hash table size 1106407, node heap has 4 buffer(s) 0.93 hash searches/s, 1.79 non-hash searches/s --- LOG --- Log sequence number 741424365 Log flushed up to 741424365 Last checkpoint at 741421898 0 pending log writes, 0 pending chkp writes 8219 log i/o's done, 0.43 log i/o's/second ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 549453824; in additional pool allocated 0 Dictionary memory allocated 645716 Buffer pool size 32768 Free buffers 31768 Database pages 996 Old database pages 371 Modified db pages 10 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 0, not young 0 0.00 youngs/s, 0.00 non-youngs/s Pages read 915, created 81, written 12929 0.00 reads/s, 0.00 creates/s, 0.00 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s LRU len: 996, unzip_LRU len: 0 I/O sum[0]:cur[0], unzip sum[0]:cur[0] -------------- ROW OPERATIONS -------------- 0 queries inside InnoDB, 0 queries in queue 1 read views open inside InnoDB Main thread id 35024334592, state: sleeping Number of rows inserted 369, updated 2897, deleted 362, read 54209 0.07 inserts/s, 0.14 updates/s, 0.00 deletes/s, 1.07 reads/s ---------------------------- END OF INNODB MONITOR OUTPUT ============================ 1 row in set (0.00 sec)
2次インデックスは検索結果にPKの値を保持しており、最終的にPKに集約されるから、PKに検索が集中する。このPK検索を効率化するためにはPKを小さくする方法が考えられる。
ログファイルが小さいことによるチェックポイントの頻度を押さえる。
| InnoDB | MyISAM | |
|---|---|---|
| リカバリ | 完全リカバリが可能 | データ消失の可能性有 |
| キャッシュ |
innodb_buffer_pool O_DIRECTを利用してOSキャッシュを無効化する方法も。 |
OSファイルキャッシュのみ |
| 保存 | PKに基づく | 挿入順 |
| 圧縮 | 無 | 可 |
| トランザクション | 対応 | 非対応 |
|
SELECT COUNT(*) |
正確な行数を知らない。 | 行数を知っているため高速。 |
| ロック | 行レベルロック | テーブルロック |
| 全文検索 | 無 | 有 |
概要については以下。
テーブルキャッシュのデフォルト値は以下。
mysql> show variables like 'table%cache%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | table_definition_cache | 400 | | table_open_cache | 2048 | +------------------------+-------+ 2 rows in set (0.01 sec)
オープンテーブルの詳細表示
実行結果例。
mysql> show open tables like 'wp%'; +-----------------+-----------------------+--------+-------------+ | Database | Table | In_use | Name_locked | +-----------------+-----------------------+--------+-------------+ | wp | wp_term_taxonomy | 0 | 0 | | wp | wp_terms | 0 | 0 | | wp | wp_commentmeta | 0 | 0 | | wp | wp_links | 0 | 0 | | wp | wp_comments | 0 | 0 | | wp | wp_usermeta | 0 | 0 | | wp | wp_ktaisession | 0 | 0 | | wp | wp_term_relationships | 0 | 0 | | wp | wp_options | 0 | 0 | | wp | wp_postmeta | 0 | 0 | | wp | wp_users | 0 | 0 | | wp | wp_posts | 0 | 0 | +-----------------+-----------------------+--------+-------------+ 12 rows in set (0.00 sec)
オープンテーブルステータスの詳細表示
mysql> show global status like 'open%table%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | Open_table_definitions | 202 | | Open_tables | 230 | | Opened_table_definitions | 1292 | | Opened_tables | 1328 | +--------------------------+-------+ 4 rows in set (0.00 sec)
mysqladmin debugコマンドの実行例。結果はエラーログに出力されているので、そのログを抜粋。
Current dir: /var/db/mysql/ Running threads: 2 Stack size: 262144 Current locks: lock: 0x827e9ae60: lock: 0x829157b60: lock: 0x829e9a100: lock: 0x829e9a800: lock: 0x829e9af00: lock: 0x829e9b300: lock: 0x829e9b800: lock: 0x829e9be00: lock: 0x829e9c300: lock: 0x829928a00: lock: 0x829e10100: lock: 0x829e10600: lock: 0x829e10b00: lock: 0x829e10f00: lock: 0x829e11100: lock: 0x829e11e00: lock: 0x829e12600: lock: 0x829e12a00: lock: 0x829e12c00: lock: 0x829e13100: lock: 0x829e13500: lock: 0x829900c00: lock: 0x829925100: lock: 0x829925600: lock: 0x829925900: lock: 0x829925c00: lock: 0x829926200: lock: 0x829926a00: lock: 0x829927000: lock: 0x829927500: lock: 0x829927c00: lock: 0x829928000: lock: 0x8292dff00: lock: 0x8298fd200: lock: 0x8298fe300: lock: 0x8298fe800: lock: 0x8298feb00: lock: 0x8298ff000: lock: 0x8298ff400: lock: 0x8298ffa00: lock: 0x8298fff00: lock: 0x829900300: lock: 0x829900700: lock: 0x828b84200: lock: 0x8261be500: lock: 0x8261bd300: lock: 0x828b6b500: lock: 0x828b84800: lock: 0x828b70c00: lock: 0x828b6df00: lock: 0x828b93900: lock: 0x828b73500: lock: 0x8298c5b60: lock: 0x828130460: lock: 0x828130b60: lock: 0x828131260: lock: 0x828131960: lock: 0x828ed4660: lock: 0x8285f4360: lock: 0x8298c7b60: lock: 0x8298c8360: lock: 0x828132e60: lock: 0x8285c2b60: lock: 0x8285c3360: lock: 0x828133560: lock: 0x828b71300: lock: 0x828b96a00: lock: 0x828b94500: lock: 0x828baab00: lock: 0x828d15a00: lock: 0x828d13c00: lock: 0x828b7a800: lock: 0x828b78100: lock: 0x828ba9d00: lock: 0x8261bdf00: lock: 0x828d83900: lock: 0x828b77400: lock: 0x828bc8900: lock: 0x828bf0700: lock: 0x828baa400: lock: 0x828ea6b60: lock: 0x828164f60: lock: 0x828166160: lock: 0x828167360: lock: 0x8285c8b60: lock: 0x828f5a960: lock: 0x82816a960: lock: 0x8285cb360: lock: 0x828ea7f60: lock: 0x8285ccb60: lock: 0x8281b4b60: lock: 0x82816f160: lock: 0x8285fa360: lock: 0x82814eb60: lock: 0x82814f360: lock: 0x82814fb60: lock: 0x828ed5160: lock: 0x828151360: lock: 0x828151b60: lock: 0x82816a960: lock: 0x8285cb360: lock: 0x828ea7f60: lock: 0x8285ccb60: lock: 0x8281b4b60: lock: 0x82816f160: lock: 0x8285fa360: lock: 0x82814eb60: lock: 0x82814f360: lock: 0x82814fb60: lock: 0x828ed5160: lock: 0x828151360: lock: 0x828151b60: lock: 0x828152360: Key caches: default Buffer_size: 33554432 Block_size: 1024 Division_limit: 100 Age_limit: 300 blocks used: 281 not flushed: 0 w_requests: 69208 writes: 11221 r_requests: 398863 reads: 47 handler status: read_key: 480124 read_next: 919354 read_rnd 112577 read_first: 9451 write: 102550 delete 11859 update: 243647 Table status: Opened tables: 1332 Open tables: 230 Open files: 211 Open streams: 0 Alarm status: Active alarms: 0 Max used alarms: 0 Next alarm time: 0
最大同時接続数を制御する。スレッド数と同数
最大同時オープン可能なファイル数を制御する。
スレッドの使い回しに利用。max_connectionsと同じ値とするとよい。なおコネクションプールの場合はそもそもキャッシュが不要と思われるため、アプリの特性は考慮すべき。
Threads_createdがおおきい場合はキャッシュを増やした方がいい。
mysql> show global status like 'thread%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 7 | | Threads_connected | 1 | | Threads_created | 19 | | Threads_running | 1 | +-------------------+-------+ 4 rows in set (0.00 sec) mysql> show global variables like 'thread%'; +--------------------+---------------------------+ | Variable_name | Value | +--------------------+---------------------------+ | thread_cache_size | 8 | | thread_concurrency | 10 | | thread_handling | one-thread-per-connection | | thread_stack | 262144 | +--------------------+---------------------------+ 4 rows in set (0.00 sec)
ソートアルゴリズムを使う場合は、sort_buffer_sizeを超えた場合はテンポラリファイルを使ってソート結果を保管する。
バッチの際に大量な領域が必要となる場合は、セッション単位で値をおおきくすることも大切。
Sort_merge_Passesの確認方法
mysql> show global status like 'Sort_merge_passes'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Sort_merge_passes | 0 | +-------------------+-------+ 1 row in set (0.00 sec)
sort_buffer_sizeの変更方法
mysql > set global sort_buffer_size = xxxxxx;
インデックスが使用されないjoin
テーブルフルスキャン時に利用される
一時テーブルにおけるメモリテーブルの最大値。メモリテーブルはmax_heap_table_sizeも併せて定義する必要有り。
メモリサイズを超えた場合はMyISAM形式でディスク上にテーブルを作成する。これは避けるべき!
Created_tmp_disk_size_tables : ディスク上にテーブルを作成した回数。0とすべき。
テーブルレベルロックの抽出。行レベル(InnoDB)は別。
sync_binlog = 1
mysql> select @@sort_buffer_size, @@global.sort_buffer_size; +--------------------+---------------------------+ | @@sort_buffer_size | @@global.sort_buffer_size | +--------------------+---------------------------+ | 8388608 | 8388608 | +--------------------+---------------------------+ 1 row in set (0.00 sec)
デフォルト ON。1件ずつ自動でコミットされる。なおトランザクションはSTART TRANSACTION/COMMIT/ROLLBACKで制御する。
一時テーブルがすべてディスクに作成される。デフォルトOFF。
一時テーブルが常にtmp_table_sizeを超える場合はONとする。メモリの圧迫を押さえることが可能。
外部キー制約を制御。デフォルトON。
外部キー制約のチェックに時間がかかる場合にOFFにする。外部キー制約が守られている場合にのみ利用すべし。
max_join_sizeを超えてjoinされる場合にSQLを中止する or NOTを制御する。デフォルトON。
クライアントにSQL結果を返却する際に、都度応答(デフォルト)ではなく、一時表にバッファリングして、応答することになる。
一般ログの出力有無を制御。デフォルトOFF。デバッグ時にONにしたい場合等で利用。
SELECTの結果上限を設定。デフォルトは2の32乗?1 or 2の64乗-1
InnoDBでのユニークキー制約を制御。デフォルトON。データ移行時やバッチ処理時に一時的に設定変更するとパフォーマンスが向上する。
バイナリログのON/OFFを制御。デフォルトON。セッションレベルで制御。
テーブル状態を取得
インデックスを確認する
オープンしているテーブルを表示する
ストレージエンジンの状態を取得する。
テーブル単位。ロック方式は以下。
mysql > SET GLOBAL concurrent_insert = xで制御
非対応
O/Sコマンドで実施
MyISAMはデータが登録された順番でAPPENDされていくイメージ。
インデックス(MYI)をメモリに乗せる仕組み。データ領域はメモリに乗らない。
キャッシュインデックスを特定のキーバッファに与えることが可能。
mysql > SET GLOBAL hogehoge_cache.key_buffer_size = xxxxxx; mysql > CACHE INDEX t1, t2, t3 IN hogehoge_cache;
キーキャッシュにロードすることも可能
mysql > LOAD INDEX INTO CACHE t1, t2 [IGNORE LEAVES];
キーの保存・削除アルゴリズムは2段階LRU(Hot sub-chain/Warm sub-chain)
mysql > show global status like 'key_%'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | Key_blocks_not_flushed | 0 | | Key_blocks_unused | 26514 | | Key_blocks_used | 281 | | Key_read_requests | 519103 | | Key_reads | 47 | | Key_write_requests | 87632 | | Key_writes | 14052 | +------------------------+--------+ 7 rows in set (0.00 sec)
MySQL お勉強メモ(キャッシュ編)です。
MySQLでは以下のキャッシュ機構を持っている。
Oracle 11gのリザルト・キャッシュ相当の機能。クエリキャッシュはSQL・実行結果(データセット込)をキャッシュしているため、ストレージエンジンまでアクセスしない。
クエリキャッシュの特性は以下。
キャッシュの対象から除外されるものは、以下
サーバ変数を確認する。
mysql> show global variables like 'query_cache%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 0 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+---------+
サーバステータスを確認する
mysql> show global status like 'Qcache_%'; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | Qcache_free_blocks | 0 | | Qcache_free_memory | 0 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 0 | +-------------------------+-------+ 8 rows in set (0.00 sec)
mysql > flush status;
mysql > reset query cache;
mysql > set global query_cache_size = xxxxxxx