検索
ホームページデータベースmysql チュートリアル从MySQL Signal 14 Warning看MySQL的线程信号处理模型_MySQL

“MySQL Signal 14 Warning”这个问题来源于在使用我们的存储引擎时会在MySQL的log中发现大量的“Got signal 14 from

thread 0?”的警告信息,并且我们移植的MySQL测试用例也会不确定地失败,除非显式指定忽略警告信息,但这也导致一些有用

的warning也被忽略了。在很长的一段时间里我们都没有能够找到真实的原因,后来我才在阅读了MySQL上层的代码和我们的代码,

以及加上一些trace后确定了问题的所在。这其实是我们没有按照MySQL预想的方式使用后台线程导致,但在MySQL的手册和网站

上似乎也没有发现这方面的tips。

MySQL的线程工作模型是(From MySQL Doc):

1、Connection manager threads handle client connection requests on the network interfaces that the server<br> listens to.<br><br>2、A signal thread handles all signals. This thread also normally handles alarms and calls process_alarm() <br>to force timeouts on connections that have been idle too long. <br><br>3、If mysqld is compiled with -DUSE_ALARM_THREAD, a dedicated thread that handles alarms is created. <br>This is only used on some systems where there are problems with sigwait()  or if you want to use the thr_alarm() <br> code in your application without a dedicated signal handling thread.<br><br><p>从mysql的main函数中可以看到,虽然mysql的主线程注册了SIGALARM的信号处理函数,但是实际上mysql是采用在指定的线程</p><p>中同步的方式处理异步信号的,即主线程在系统初始化时先进行信号的初始化,包括设置主线程的信号掩码,以统一抛给信号处理</p><p>线程去处理,主线程的信号掩码会被它的所有子线程继承,之后进程收到的信号都会由信号处理线程去处理。但前提是所有的子线</p><p>程都继承了主线程的信号掩码,否则异步信号总能够传递给进程。</p><p>我们的问题出在有两个后台线程是在静态变量中初始化和启动的,这时候mysql的主线程根本还没进行信号掩码的设置,所以SIGALARM这个</p><p>本来应该由信号处理线程处理的信号,却通过我们的后台线程handle给了MySQL的主进程,并调用信号处理函数打出这个warning。</p>后来发邮件给MySQL的开发人员(http://lists.mysql.com/internals/38057), 他们确认了我的理解是对的, 并且指出了我们这样使用线程<br>可能导致其他的问题, 包括:<br><p>1、在静态变量的构造函数中执行代码,可能导致代码执行权限被提升,有安全问题;</p><p> 2、如果把存储引擎编译成动态链接库的形式的话,只有init()回调函数会被调用到,静态变量的构造函数永远不会被执行。</p><p>他们的建议是:Please don't execute any code before mysql asks you to initialide the engine.</p>而innodb默认也有几个后台的io线程,之所以没这个问题,是因为这些后台线程是在innobase_init()函数中创建的,这些线程都继承了主线程的信号掩码。<br>
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQL:初心者が習得するための必須スキルMySQL:初心者が習得するための必須スキルApr 18, 2025 am 12:24 AM

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQL:構造化データとリレーショナルデータベースMySQL:構造化データとリレーショナルデータベースApr 18, 2025 am 12:22 AM

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQL:説明されている主要な機能と機能MySQL:説明されている主要な機能と機能Apr 18, 2025 am 12:17 AM

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLの目的:MySQLデータベースとの対話SQLの目的:MySQLデータベースとの対話Apr 18, 2025 am 12:12 AM

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

初心者向けのMySQL:データベース管理を開始します初心者向けのMySQL:データベース管理を開始しますApr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

MySQLの役割:WebアプリケーションのデータベースMySQLの役割:WebアプリケーションのデータベースApr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

MySQL:最初のデータベースを構築しますMySQL:最初のデータベースを構築しますApr 17, 2025 am 12:22 AM

MySQLデータベースを構築する手順には次のものがあります。1。データベースとテーブルの作成、2。データの挿入、および3。クエリを実行します。まず、createdAtabaseおよびcreateTableステートメントを使用してデータベースとテーブルを作成し、InsertINTOステートメントを使用してデータを挿入し、最後にSelectステートメントを使用してデータを照会します。

MySQL:データストレージに対する初心者向けのアプローチMySQL:データストレージに対する初心者向けのアプローチApr 17, 2025 am 12:21 AM

MySQLは、使いやすく強力であるため、初心者に適しています。 1.MYSQLはリレーショナルデータベースであり、CRUD操作にSQLを使用します。 2。インストールは簡単で、ルートユーザーのパスワードを構成する必要があります。 3.挿入、更新、削除、および選択してデータ操作を実行します。 4. Orderby、Where and Joinは複雑なクエリに使用できます。 5.デバッグでは、構文をチェックし、説明を使用してクエリを分析する必要があります。 6.最適化の提案には、インデックスの使用、適切なデータ型の選択、優れたプログラミング習慣が含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、