コンテンツにスキップ
トラブルシューティング

トラブルシューティング

よくある問題の対処、エラーコード、性能改善の方法を説明します。

よくある問題

サーバーの問題

起動しない

症状:

  • machadmin -u が失敗
  • Address already in use エラー
  • サーバープロセスがない

対処:

# ポートの使用を確認
netstat -an | grep 5656
lsof -i :5656

# lsof の PID とプロセス名を確認し、該当サービスの管理コマンドで停止
# Machbase の既存プロセスを停止する場合
machadmin -s

# DB ディレクトリを確認
ls -la $MACHBASE_HOME/dbs/

# ログを確認
tail -50 $MACHBASE_HOME/trc/machbase.trc

# 起動を再試行
machadmin -u

クラッシュする

症状:

  • 予期しない停止
  • コアダンプが生成
  • Segmentation fault エラー

対処:

# ログを確認
tail -100 $MACHBASE_HOME/trc/machbase.trc

# システムリソースを確認
free -h
df -h

# メモリ使用量を削減(machbase.conf)
# PROCESS_MAX_SIZE = 1073741824 # 1GB

# ディスク空きを確認
du -sh $MACHBASE_HOME/dbs/

接続の問題

接続できない

症状:

  • Connection refused
  • Connection timeout
  • machsql で接続失敗

対処:

# 稼働を確認
machadmin -e

# ネットワーク接続を確認
ping server-address
telnet server-address 5656

# ファイアウォールを確認
sudo iptables -L | grep 5656

# 認証情報を確認
machsql -s localhost -u SYS -p MANAGER

接続数が多すぎる

症状:

  • Max connections exceeded
  • 新規接続が拒否される

対処:

-- 接続数を確認
SELECT COUNT(*) FROM V$SESSION;

-- machbase.conf の MAX_SESSION_COUNT を増やす
-- MAX_SESSION_COUNT = 200

-- 必要ならアイドル接続を終了

クエリーの問題

検索が遅い

症状:

  • 実行に時間がかかる
  • タイムアウト
  • CPU 使用率が高い

対処:

-- 時刻条件を追加
SELECT * FROM table DURATION 1 HOUR;  -- この条件を追加

-- LIMIT を使用
SELECT * FROM table LIMIT 1000;

-- 元データの代わりにロールアップを検索
SELECT ROLLUP('hour', 1, time) AS rtime, AVG(value)
FROM sensors
WHERE name = 'sensor-1'
GROUP BY rtime;

-- インデックスを作成
CREATE INDEX idx_column ON table(column);

-- 実行計画を確認
EXPLAIN SELECT ...;

メモリ不足

症状:

  • Out of memory
  • クエリーが途中で失敗
  • サーバーが応答しない

対処:

-- 結果を減らす
SELECT * FROM table DURATION 1 HOUR LIMIT 1000;

-- 取得する列を減らす
SELECT col1, col2 FROM table;  -- SELECT * を避ける

-- machbase.conf の MAX_QPX_MEM を増やす
-- MAX_QPX_MEM = 1G

データの問題

インポートが失敗

症状:

  • machloader のエラー
  • CSV の読み込みが失敗
  • データ型の不一致

対処:

# CSV 形式を確認
head -10 data.csv

# テーブルスキーマを確認
machsql -f - <<EOF
SHOW TABLE tablename;
EOF

# エラーログを確認
# machloader の -l で指定した実行ログを確認
cat /tmp/machloader.log

# データ型を検証
# CSV の列をスキーマに合わせる

# 少量のバッチで先に試す
head -100 data.csv > test.csv
machloader -i -t table -d test.csv -l /tmp/machloader.log

データが見つからない

症状:

  • 想定したデータがない
  • 件数が一致しない
  • 時刻に欠落がある

対処:

-- 時刻範囲を確認
SELECT MIN(_arrival_time), MAX(_arrival_time) FROM table;

-- 合計件数を確認
SELECT COUNT(*) FROM table;

-- NULL を確認
SELECT COUNT(*) FROM table WHERE column IS NULL;

-- インポート完了を確認
-- machloader のログを確認

エラーコード

よくあるエラー

以下は症状を分類するためのメッセージ例です。実際のエラー番号と意味は、サーバーが返した番号をエラーコードで確認してください。

メッセージ例対処
Connection failedサーバーとネットワークを確認
Authentication failed認証情報を確認
Table not found名前を確認し、SHOW TABLES を実行
Column not found列名を確認し、SHOW TABLE を実行
Duplicate keyPRIMARY KEY の制約を確認
Data type mismatch型を検証
Out of memory検索対象を減らす、メモリを増やす
Timeout時刻条件を追加、タイムアウトを調整

全一覧はエラーコードを参照してください。

性能の改善

クエリーの最適化

  1. 時刻条件を指定
-- 避ける例
SELECT * FROM sensors WHERE sensor_id = 'sensor01';

-- 推奨
SELECT * FROM sensors
WHERE sensor_id = 'sensor01'
DURATION 1 HOUR;
  1. 分析にロールアップを使用
-- 低速
SELECT AVG(value) FROM sensors
WHERE name = 'sensor-1'
  AND time BETWEEN now - 7d AND now;

-- 高速
-- sensors は WITH ROLLUP で作成した TAG であること
SELECT ROLLUP('hour', 1, time) AS rtime, AVG(value)
FROM sensors
WHERE name = 'sensor-1'
  AND time BETWEEN now - 7d AND now
GROUP BY rtime;
  1. 必要なインデックスを作成
CREATE INDEX idx_level ON logs(level);
  1. 結果件数を制限
SELECT * FROM logs DURATION 1 DAY LIMIT 1000;

サーバーの調整

# メモリ最適化
PROCESS_MAX_SIZE = 4294967296 # 4GB
MAX_QPX_MEM = 1073741824      # クエリーごとのメモリ

# 性能調整
DISK_COLUMNAR_TABLE_CHECKPOINT_INTERVAL_SEC = 900
DISK_COLUMNAR_INDEX_CHECKPOINT_INTERVAL_SEC = 900
QUERY_PARALLEL_FACTOR = 8

データ管理

  1. 保持期間を設定
DELETE FROM logs EXCEPT 30 DAYS;
  1. 書き込みを一括化
# 一括挿入に APPEND API を使用
# machbaseAPI.connect() の接続 conn と、行のリスト data を使用
conn.append('table', data)
  1. ストレージを監視
SHOW STORAGE;

診断コマンド

稼働状態

# サーバーの稼働確認
machadmin -e

# 実行中のクエリーを表示
machsql -f - <<EOF
SHOW STATEMENTS;
EOF

# ストレージを確認
machsql -f - <<EOF
SHOW STORAGE;
EOF

ログの確認

# サーバーログ
tail -50 $MACHBASE_HOME/trc/machbase.trc

# エラーログ
grep -i error $MACHBASE_HOME/trc/machbase.trc

# 最近の動作
tail -100 $MACHBASE_HOME/trc/machbase.trc

システム情報

-- テーブル
SHOW TABLES;

-- テーブル詳細
SHOW TABLE tablename;

-- ユーザー
SHOW USERS;

-- インデックス
SHOW INDEXES;

-- ライセンス
SHOW LICENSE;

サポートを受ける

収集する情報

問題の報告には、次を用意します。

  1. 正確なエラーメッセージ
  2. サーバーログ($MACHBASE_HOME/trc/machbase.trc)
  3. Machbase のバージョンmachadmin -v
  4. OS 情報uname -a
  5. 再現手順

参照資料

問題を防ぐための推奨事項

  1. クエリーに時刻条件を指定
  2. 保持ポリシーを設定
  3. サーバーリソースを定期監視
  4. 定期バックアップ(毎日)
  5. 小さなデータで先にテスト
  6. 適切なテーブル型を選択
  7. Machbase を適切な最新版へ更新

簡単な対処

# サーバーを再起動
machadmin -s && sleep 5 && machadmin -u

# ディスク空きを確認
df -h

# メモリを確認
free -h

# 最近のエラーを表示
grep -i error $MACHBASE_HOME/trc/machbase.trc | tail -20

# 接続テスト
machsql -s localhost -u SYS -p MANAGER -f - <<EOF
SELECT SYSDATE;
EOF

関連ドキュメント

最終更新日