データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

5
非クラスター化インデックスは、いつ別々のファイルグループに保存する必要がありますか?
別のファイルグループとドライブにインデックスを保存すると、ドライブがインデックスとインデックスが参照するデータとの間を行き来する必要がないため、データベースのパフォーマンスが向上すると聞きました。また、これは神話だと聞いたことがあります。 非クラスター化インデックスを別のファイルグループとドライブに保存することをお勧めします。どのようなperfmon / profilerの証拠がその結論に到達するのに私を導くでしょうか?ハードウェアは決定に役割を果たしますか(RAID / SANが単一のドライブで使用されるかどうか)?
16 sql-server  index 

2
innodbステータスログでデッドロックを解読する際の問題
Microsoft ADO.NETコネクタからMySQLにアクセスしています。 ときどき、innodbステータスに次のデッドロックが発生し、問題の原因を特定できないことがあります。トランザクション(2)は同じロックを待機して保持しているように見えますか? ------------------------ LATEST DETECTED DEADLOCK ------------------------ 110606 5:35:09 *** (1) TRANSACTION: TRANSACTION 0 45321452, ACTIVE 0 sec, OS thread id 3804 starting index read mysql tables in use 1, locked 1 LOCK WAIT 2 lock struct(s), heap size 368, 1 row lock(s) MySQL thread id 84, query id …

2
時折クエリが遅くなる理由は?
Windows Server 2008 R2でMySQL 5.1を実行しています。 私たちは最近データベースでいくつかの診断をしていて、説明できないいくつかの邪魔なアーティファクトを見つけました。長時間(> 2000ミリ秒)のクエリがある場合にログにコードを追加しました。結果は驚くべきものでした(そして、おそらくデッドロックの説明)。 通常、非常に短い時間(10ミリ秒未満)で実行されるクエリには、4〜13秒かかります。明確にするために、これらは絶えず(1秒間に数回)実行されているクエリであり、これらのクエリの時間スパイクに悩まされていません。 明らかな間違いを探すためにインデックスを調べましたが、あまり運がありませんでした。 更新 ピープルテーブル: | people | CREATE TABLE `people` ( `people_id` bigint(20) NOT NULL AUTO_INCREMENT, `company_id` bigint(20) NOT NULL, `name` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `temp_password` varchar(10) DEFAULT NULL, `reset_password_hash` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `phone` varchar(32) DEFAULT …

2
SQL Server 2008-パーティション化とクラスター化インデックス
ですから、私のdb設計を完​​全に制御することはできません。そのため、このシナリオの目的のために現在のシステムの多くの側面を変更することはできません。 デザインの側面をどのように再考すべきかについてのコメントはおそらく正しいが、役に立たない:) 私は非常に大きなテーブルがあり、幅が約150フィールド、行が約600mあり、多数のプロセスを駆動します。これはデータウェアハウスの状況にあるため、スケジュールされたロードプロセス以外では更新/挿入が行われないため、インデックスが大量に作成されます。 このテーブルをパーティション分割しようとする決定が下されており、パーティション分割されたテーブルのインデックス作成に関して懸念があります。私はパーティション分割の経験がないので、入力やリンクを歓迎します。私はBOLまたはmsdnで私が特に望んでいるものを見つけることができませんでした。 現在IncidentKey、varchar(50)一意であるとは呼ばないフィールドにクラスターを作成します。1〜100個の同じレコードを持つことができますIK(コメントは不要です)。古いIncidentKeyレコードで新しいデータを取得することが多いため、どちらもシーケンシャルではありません。 IncidentDateパーティションが正しく機能するためには、パーティション化フィールドをクラスター化インデックスキーに含める必要があることを理解しています。そうなると思っていますIncidentKey, IncidentDate。 問題は、「新しい」パーティションのレコードがクラスター化インデックスの「古い」パーティションのレコードの前にある場合、クラスター化インデックスの仕組みはパーティションテーブルの2パートキーでどのように機能するかです。 たとえば、5つのレコードがあります。 IncidentKey Date ABC123 1/1/2010 ABC123 7/1/2010 ABC123 1/1/2011 XYZ999 1/1/2010 XYZ999 7/1/2010 新しいレコードを取得する場合ABC123, 2/1/2011は、クラスター化インデックスのBEFORE にある必要がありXYZ999, 1/1/2010ます。これはどのように作動しますか? 断片化とポインターを想定していますが、デュアルパートキーを持つパーティションテーブルの非パーティションクラスター化インデックスの物理ストレージと構成に関する情報が見つかりません。

3
MySQLストアドプロシージャ内でプリペアドステートメントを使用する方法は?
私はmysqlを使用しており、後のクエリで準備されたステートメントによって返された列curidを何らかの方法で使用する必要があります。私が読んだように、変数をLIMIT句に渡す唯一の方法であるため、プリペアドステートメントを使用します。ここにこのストアドプロシージャがあります。 DROP PROCEDURE IF EXISTS fixbalance; CREATE PROCEDURE fixbalance (userid INT) BEGIN DECLARE i INT DEFAULT 0; DECLARE balance INT DEFAULT 0; DECLARE idcnt INT; SET idcnt = (SELECT COALESCE(COUNT(id), 0) FROM coupon_operations WHERE user_id = userid); IF idcnt <> 0 THEN WHILE i <= idcnt DO BEGIN SET @iter …

1
SQL Anywhere 11:増分バックアップエラーの復元
完全バックアップの後にリモート増分バックアップを作成します。これにより、障害が発生した場合に復元し、SQL Anywhereネットワークサーバーで可能な限りリアルタイムのバックアップを使用して別のマシンを起動できます。 次のように完全バックアップを行っています。 dbbackup -y -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)" c:\backuppath\full これにより、データベースとログファイルのバックアップが作成され、期待どおりに復元できます。増分バックアップの場合、複数の増分バックアップがある場合、名前変更スキームを使用してライブトランザクションログと増分トランザクションログの両方を試しました。 dbbackup -y -t -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)" c:\backuppath\inc dbbackup -y -l -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)" c:\backuppath\live ただし、復元時にトランザクションログを適用すると、データベースにトランザクションログを適用するときに常にエラーが表示されます。 10092:トランザクションログで参照されているテーブルのテーブル定義が見つかりません トランザクションログの復元コマンドは次のとおりです。 dbeng11 "c:\dbpath\dbname.db" -a "c:\backuppath\dbname.log" エラーはどのテーブルを見つけることができないかを指定しませんが、これは制御されたテストであり、テーブルが作成または削除されていません。いくつかの行を挿入し、復元を試みる前に増分バックアップを開始します。 Sql Anywhere 11で増分バックアップと復元を行う正しい方法を知っている人はいますか? 更新:ターゲットデータベースの複雑さに関連している可能性があると考え、新しい空のデータベースとネットワークサービスを作成しました。次に、2つの列を持つ1つのテーブルを追加し、数行を挿入しました。完全バックアップを作成し、さらに数行とコミットされたトランザクションを挿入および削除してから、増分バックアップを作成しました。完全バックアップを復元した後にトランザクションログの増分バックアップを適用しようとすると、これも同じエラーで失敗しました... 編集: このリンクをたどると、SAに関する若干のフィードバックがある同じ質問を見ることができます:http : //sqlanywhere-forum.sybase.com/questions/4760/restoring-incrementallive-backup-failure

3
MySQLサブクエリの問題
このクエリを実行する理由 DELETE FROM test WHERE id = ( SELECT id FROM (SELECT * FROM test) temp ORDER BY RAND() LIMIT 1 ); 時には1行、時には2行、時には何も削除しませんか? この形式で書いた場合: SET @var = ( SELECT id FROM (SELECT * FROM test) temp ORDER BY RAND() LIMIT 1 ); DELETE FROM test WHERE id=@var; それは正しく動作します-サブクエリに問題はありますか?
16 mysql 

3
12 GBの.sqlファイルのインポートに36時間以上かかるのはなぜですか?
単純なtype site.sql | mysqlコマンドで12 GBの.sqlファイルがインポートされるまで、36時間待っていました。ibdata1現在も40 GB近くのまだ成長していることがわかります。 トリガーとストアドプロシージャが.sqlの最後にあることを考慮すると、MySQLはデータとキーインデックスを追加するだけだと思います。 site.sqlは、別のサーバーから次のコマンドを使用して生成されました。 mysqldump -R -e --databases site --add-drop-database --add-create-database --add-drop-table -C --single-transaction --triggers 何がかかっているの?
16 mysql  mysql-5  mariadb 

3
SQLとPL / SQLを区別する方法は?
質問は馬鹿げているように聞こえるかもしれませんが、この部分は理解できませんでした。 SQL * Plusは、SQLとPL / SQLの両方で機能します。一部のコードがSQLであるかPL / SQLであるかをどのようにして知ることができますか?私のコードにforループがある場合、それはもうSQLではありませんか? PL / SQLは、ループ、条件などを含むSQLの拡張機能です。その後、SQLコードはデフォルトでPL / SQLコードですか?そうじゃない? SQLとPL / SQLの間に境界はありますか? この質問を引き起こしたb / w SQLとPL / SQLを区別する2つの例: これら2つのcreate tableステートメントの違いは何ですか? /programming/2267386/oracle-11g-varray-of-objects/2267813#2267813

5
クエリキャッシュが無効になっているときに、MySQLスレッドが「アイテムの解放」ステータスを表示することが多いのはなぜですか?
を実行するとSHOW PROCESSLIST、多くの場合、「アイテムの解放」状態の多数のINSERT / UPDATEスレッドがあります。 MySQLのマニュアルでは、スレッドがこの状態になる理由の少なくとも一部がクエリキャッシュに関係していることを示唆しています。データの変更によりキャッシュクエリが無効になっていると考えられます。 ただし、my query_cache_sizeは0に設定され、クエリキャッシュが完全に無効になります。 この状態で非常に多くのスレッドを持つことには、他にどのような理由がありますか? 関連するテーブルはInnoDBストレージエンジンを使用します。
16 mysql  innodb 

4
SQL * Plusコマンドの最後のセミコロンの意味は何ですか?
create table、insert intoなどの一部のステートメントは、最後にセミコロンを使用します。 CREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo NOT NULL ) ; 他の人が好きな間 set echo on connect system/manager 同様にセミコロンなしで通過します。 この背後にある理由は何ですか?セミコロンを配置する場所と配置しない場所を自分で決定するにはどうすればよいですか?

2
特異なOracle外部結合構文のケース
Oracleの外部結合構文からSQL標準の外部結合構文に移植されることになっているクエリで、次のことがわかりました。 SELECT ... FROM A, B, C, D, E WHERE A.A_ID = B.A_ID AND B.B_ID = C.A_ID(+) AND B.B_KEY = C.B_KEY(+) AND C.C_ID = D.C_ID(+) AND B.A_ID = E.A_ID(+) AND B.B_KEY = E.B_KEY(+) AND 'CONSTANT' = C.X_ID(+) 現在、外部結合構文の翻訳は通常非常に機械的なプロセスですが、その最後の行は私を困惑させました。どういう意味ですか?どのような効果がありますか?
16 oracle  join  syntax 

4
SQLを使用してリレーショナルデータベースでツリー状のデータを走査する
SQLでツリーデータをトラバースする方法はありますか?私connect byはOracleで知っていますが、他のSQL実装でこれを行う別の方法はありますか?connect by各結果に対してクエリを実行するループまたは再帰関数を作成するよりも使用する方が簡単だからです。 「ツリーデータ」というフレーズに混乱しているように見える人もいるので、さらに説明しparent_idます。つまり、同じテーブル内の別の行の主キーを含む、または同様のフィールドを持つテーブルに関してです。 問題は、この方法でOracleデータベースに保存されたデータを操作していて、connect by他のDBMSに実装されていないことを知っていた経験からです。標準SQLを使用する場合は、上位にしたい親ごとに新しいテーブルエイリアスを作成する必要があります。これは簡単に手に負えなくなる可能性があります。

7
別のSQL2008データベースへのテーブルの移動(インデックス、トリガーなどを含む)
1つのSQL2008データベースから別のSQL2008データベースへ、大量(100行以上)の大きなテーブル(数百万行)を移動する必要があります。 もともとインポート/エクスポートウィザードを使用していましたが、すべての宛先テーブルにプライマリキーと外部キー、インデックス、制約、トリガーなどがありませんでした(ID列もプレーンINTに変換されましたが、ウィザード。) これを行う正しい方法は何ですか? これがほんの2、3のテーブルである場合、ソースに戻り、テーブル定義(すべてのインデックスなどを含む)をスクリプトで出力してから、スクリプトのインデックス作成部分を宛先で実行します。しかし、テーブルが非常に多いため、これは実用的ではないようです。 データがそれほど多くない場合は、「スクリプトの作成...」ウィザードを使用して、データを含むソースをスクリプト化できますが、72mの行スクリプトはあまり良い考えではありません。

7
DBAになる方法を学ぶにはどうすればよいですか?
ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 DBAなどへの質問:「実践」または実地トレーニングを受けずにDBAになるスキルをどのように学習しますか? DBの仕事での私の経験は、MyPHPAdminまたは類似のものを介してMySQLをいじっていました。大量の詳細な作業を行っていません。 クラス?SQLブック?
16 career 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.