3

これは一般的な質問で、私はしばらく頭を悩ませてきました。私の会社のデータベースは、1 日に約 2,000 行を処理します。99.9% の確率で、セットアップされたさまざまな SELECT ステートメントで返される値に問題はありません。ただし、ごくまれに、データベースが「グリッチ」して、要求されたものとはまったく異なる行の値を返すことがあります。

これは非常に基本的な例です:

+---------+-------------------------+
| row_id  | columnvalue             |
+---------+-------------------------+
|       1 | 10                      |
|       2 | 20                      |
|       3 | 30                      |
|       4 | 40                      |
+---------+-------------------------+

SELECT columnvalue FROM table_name WHERE row_id = 1 LIMIT 1

リターン: 10

しかし、ごくまれに、20 や 30 などの値が返されることがあります。

なぜ時々これを行うのかについて完全に困惑しており、プログラミング現象のように見えるものについての洞察をいただければ幸いです。

より具体的な情報:

SELECT
  USERID, CONCAT( LAST, ', ', FIRST ) AS NAME, COMPANYID 
FROM users, companies 
WHERE users.COMPANYCODE = companies.COMPANYCODE 
AND USERID = 9739 LIMIT 1

mysql> DESCRIBE users;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| USERID     | int(10)     | NO   | PRI | NULL    | auto_increment |
| COMPANYCODE| varchar(255)| NO   | MUL |         |                |
| FIRST      | varchar(255)| NO   | MUL |         |                |
| LAST       | varchar(255)| NO   | MUL |         |                |
+------------+-------------+------+-----+---------+----------------+

mysql> DESCRIBE companies;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| COMPANYID  | int(10)     | NO   | PRI | NULL    | auto_increment |
| COMPANYCODE| varchar(255)| NO   | MUL |         |                |
| COMPANYNAME| varchar(255)| NO   |     |         |                |
+------------+-------------+------+-----+---------+----------------+

予想される結果: 9739, "L----, E----", 2197 代わりの結果: 9739, "L----, E----", 3288

基本的に、会社コードとの結合に基づいて間違った会社 ID を返しました。当社の性質上、これ以上の情報はお伝えできません。

私はこのクエリを 5,000 回実行し、2 番目の結果セットを生成するためにコードを大幅に変更しましたが、それを複製することはできませんでした。私はすぐに MySQL を責めるつもりはありません。これは 8 年以上 (めったにありませんが) 発生しており、他のすべての考えられる原因を使い果たしています。クエリの実行後に結果が手動で変更されたのではないかと疑っていますが、タイムスタンプはそうではありません。

なぜこれが 50 万回中 499 万回も完全に実行できるのか、頭を悩ませています。

4

3 に答える 3