開発 迅速な対応:データベースのデバッグとプロファイリングによる救助

迅速な対応:データベースのデバッグとプロファイリングによる救助

Anonim

Techopediaスタッフ、2017年3月15日

持ち帰り:ホストのエリック・カバナは、データベースのデバッグとプロファイリングについて、ロビン・ブロア博士、デズ・ブランフィールド、およびIDERAのバート・スカルツォと話しました。

あなたは現在ログインしていません。ビデオを見るにはログインまたはサインアップしてください。

エリック・カバナ:オーケー、皆さん、水曜日の東部標準時は4時です。

Robin Bloor:聞こえないよ、エリック。

エリック・カバナ:私は数日前にそこにいたので、あなたは一人ではありません。 しかし、今日のトピックは本当に興味深いものです。 あなたが会社のバックグラウンドで起こっていることを確認したいのは、あなたがそれをしている人でない限りです。その場合、あなたはそれを適切に行っていることを確認したいのです。 デバッグについて話しているからです。 バグが好きな人はいません。ソフトウェアが機能しなくなったときも好きな人はいません。人々は動揺し、ユーザーは不親切になります。 それは良いことではありません。 そこで、「迅速な対応:データベースのデバッグとレスキューへのプロファイリング」についてお話します。

本当にあなたのものについてのスポットがあります、もちろんツイッター、@ eric_kavanaghで私を見つけてください。

今年は暑いです。 そして、デバッグは何があっても熱くなります。 これらの問題の1つになることは決してありません。この問題にどれほど上手くいくとしても、常に問題が発生するので、重要なのは、これらの問題を迅速に解決できる場所にどのように到達するかです。 理想的には、優れたプログラマー、優れた環境があり、あまりうまくいかないのですが、昔のことわざにあるように、「事故は家族の中で起こる」と同じことが組織にも当てはまります。 だから、このようなことが起こります、起こるでしょう、問題はそれを処理し、それらの問題を解決するためのあなたのソリューションになるのですか?

Dr. Robin Bloor、そして私たち自身のDez Blanchfieldから、そしてもちろん、IDERAの良き友人Bert Scalzoから話を聞きます。 そして実際、Robin Bloorにキーを渡して、それを取り去ります。 床はあなたのものです。

Robin Bloor:わかった。 これは興味深いトピックです。 Dezはおそらくデバッグに関する実際のテクニックや戦争の話を続けると思うので、何が起こっているのかを完全に概観できるように、バックグラウンドで話し合うだけだと思いました。 私はこれを長い間やったので、以前はコーダーだったので、まるでオープンソースのアイデアについて叙情的な説明を始めるようにこのプレゼンテーションに夢中になりましたが、それを他の人に任せるつもりでした。

有名なバグのリストを次に示します。これらのほとんどは、基本的には、最後の2つを除くすべてが少なくとも1億ドルのコストで、誰のトップリストにも入ります。 最初のものは火星気候オービターで、宇宙で迷子になりました。それはコーディングの問題が原因で、人々がメートル単位をフィートとインチで混同していました。 Ariane Five Flight 501では、搭載されたエンジンと、ロケットの打ち上げ時にロケットを実行するはずだったコンピューターとの間に不一致がありました。 複数のコンピューターの障害、爆発するロケット、ヘッドラインニュース。 1982年のソビエトガスパイプラインは、地球史上最大の爆発と言われています。 私はそれがそうかどうかわかりません。 ロシア人は自動化された制御ソフトウェアをいくつか盗みました。CIAはそれを実行してバグを追加することに気付き、ソビエトはテストせずに実装しました。 だから、パイプラインを爆破して、面白いと思った。

Morrisワームはコーディング実験でしたが、突然、みんなの周りを回る強欲なワームになりました。明らかに1億ドル相当の損害をもたらしました。 それは当然のことです。 Intelは、1993年のPentiumチップでの数学命令である数学チップで有名なエラーを犯しました。これは1億ドル以上の費用がかかるはずでした。 AppleのMapsプログラムは、Appleがこれまでに行ったことのあるものの中で最悪で最も悲惨な打ち上げになる可能性があります。 それを使ってみた人は、誰かが101に沿って運転していたので、Apple Mapがサンフランシスコ湾の真ん中にいると言っていたことを発見しました。 そのため、人々はApple MapsアプリをiLostと呼び始めました。 1990年の最長の停止-そのようなもののコストの観点から興味深いのは、AT&Tが約9時間使用され、長距離電話で約6, 000万ドルかかったということです。

そして、私は英国の保険会社とデータベースにいましたが、彼らは新しいバージョンのデータベースを実装し、データを消去し始めました。 そして、そのために何らかのデータベース選択に参加するために後で呼ばれたので、それを非常によく覚えています。 また、データベースの新しいバージョンを取得し、すべてのテストに合格したデータベースの新しいバージョンに対して行った一連のテストが行​​われたことは非常に興味深いことでした。 データを消去するための非常にわかりにくい方法が見つかりました。

とにかく、それはそれです。 インピーダンスの不一致と発行されたSQLについて話そうと思いました。 リレーショナルデータベースがテーブルにデータを保存し、コーダーがオブジェクト構造内のデータを操作する傾向があるのは興味深いことです。 そのため、インピーダンスミスマッチと呼ばれるものが得られ、誰かが何らかの方法でそれを処理する必要があります。 しかし実際には、コーダーのモデルとデータベースの別のモデルのモデルが特に整合していないため、実際に何が起こるのでしょうか。 業界が一緒に機能するものを構築していたとしても発生しないバグが発生しますが、それは面白いと思います。 したがって、基本的には、コーダー側では、階層を取得すると、型、結果セット、貧弱なAPI機能、データベースとのやり取りの観点から物事を捨てる多くのものになる可能性があります。 しかし、私にとって最も重要なことは、本当に興味深いことです。 コーダーとデータベースが互いに連携するという点で、一種のインピーダンスでもあるこのSQLバリアがあることを常に驚かせました。 そのため、SQLにはデータ認識があり、それは問題なく、選択、プロジェクト、および結合用のDMLがあります。 それを使用してデータベースからデータを取得するという点で、多くの機能をスローできます。 しかし、物事を行うための数学的な言語はほとんどありません。 これには多少の違いがあり、時間ベースのものはほとんどありません。 そのため、SQLはデータを取得する手段としては不完全です。 そのため、データベース担当者は、データベースに格納するストアドプロシージャを構築しました。そこに格納されているストアドプロシージャが存在する理由は、プログラムとの間でデータをやり取りしたくないからです。

一部の機能は非常にデータ固有であったため、参照整合性とカスケード削除などだけではなく、データベースが突然データベースに機能を配置するすべてのことをデータベースが処理していました。アプリケーションの機能は、コーダーとデータベース自体に分割できます。 そして、それはいくつかの種類の機能を実装する仕事を本当に非常に難しくし、そのためよりエラーを起こしやすくしました。 ですから、それはデータベースゲームの1つの側面です。これは、たとえば、多くの実装に携わっていること、つまり、リレーショナルデータベースに関与していること、つまり、処理されるストアドプロシージャに存在する非常に多くのコードがあることを意味しますアプリケーションにあるコードとは別に。 そして、それは非常に奇妙なことのように思えますが、さまざまなことをするのにかなり賢いはずです。

パフォーマンスエラーはバグと見なされることが多いため、データベースのパフォーマンスについても話したいと思いましたが、基本的にはCPU、メモリ、ディスク、ネットワークでボトルネックが発生し、ロックのためにパフォーマンスの問題が発生する可能性があります。 考えは、コーダーが実際にパフォーマンスを気にする必要はなく、データベースは実際にはかなりうまく機能するということです。 コーダーが知る必要がないように設計されているはずです。 ただし、データベースの設計、プログラムの設計、ワークロードのミキシングの同時実行は、パフォーマンスの問題につながる可能性があります。 負荷分散、キャパシティプランニング、データ増加を実現します。これにより、データベースが停止したり、速度が低下したりする可能性があります。 興味深いことに、データベースがほぼいっぱいになると、速度が低下します。 また、レプリケーション、レプリケーションの必要性、およびバックアップとリカバリの必要性に関して、データレイヤーの問題を発生させることができます。 とにかく、それは一般的な概要です。

私が言いたいのは、データベースのデバッグは面倒で非自明なものにしかなれないということです。そして、私は多くのことをやったので、私はそれをデバッグのあらゆる状況のように感じます。これまでに経験したことは、あなたがこれまでに見た最初のことは混乱です。 そして、あなたは混乱からどのように混乱が生じたのかを解明しようと試みなければなりません。 多くの場合、データベースの問題を調べているとき、見ているのは破損したデータだけであり、「どうしてそれが起こったのか」と考えています。

とにかく、私は出てきたよりも多くの知恵の言葉を言うだろう、デズに移ります。 ボールを渡す方法がわからない、デズ。

エリック・カバナ:合格し、待機し、 しばらくお待ちください

自動音声:参加者の回線がミュートされました。

エリック・カバナ:よし 、1秒待って、デズにボールをあげさせて。

Dez Blanchfield:ありがとう、エリック。 はい、ロビン・ブロア博士、あなたは本当に最も正しいです。これはトピックです。もしあなたがしゃれを許せば生涯のバグベアーです。申し訳ありませんが、私はそのことについて自分を助けることができませんでした。 うまくいけば、最初の画面が表示され、フォントサイズの問題に対する謝罪が上部に表示されます。 バグのトピックは、私の経験では多くの場合、1日の講義です。 これは非常に広範にわたるトピックなので、2つの重要な領域、特にバグと見なされるものの概念ですが、プログラミングの問題に焦点を当てます。 最近のバグ自体の導入は、一般的に統合開発環境で取り上げられると思いますが、長期にわたるバグかもしれません。 しかし、多くの場合、コードをプロファイリングする場合の方が多く、機能するコードを記述することは可能ですが、それはバグです。 ですから、ここでのタイトルスライドでは、実際に非常に高解像度のA3でこのコピーを手に入れましたが、残念ながら家の移転で破壊されました。 しかし、これは1945年頃のプログラミングシートに書かれた手書きのメモであり、アメリカのハーバード大学の一部の人々がマークIIと呼ばれる2番目のマシンをビルドしたと思われます。 彼らはいくつかの問題を共通言語でデバッグしていましたが、障害を見つけようとしていましたが、ハードウェアやソフトウェアの問題とはわずかに異なるものがやってきたことがわかりました。

だから、都市の神話は、1945年9月9日頃、ハーバード大学のチームが機械を引き離し、「リレー70」と呼ばれるものに遭遇したということです。当時、プログラミングは物理的な意味で行われ、ボードの周りで、それはあなたがマシンを効果的にプログラムした方法でした-そして、彼らはこのリレー番号70にそれが間違っていることを発見し、それは実際には「バグ」という用語が非常に文字通りだったために生じたことが判明しましたある場所から別の場所へ行く銅線の間に挟まれたでした。 そして、このキャプションとしての伝説のグレース・ホッパーは、私のタイトルのスライドで「バグが見つかった最初の実際のケース」という引用を引用しています。

しかし、Robinが最初のスライドで先ほど強調したように、バグの概念は、人間がパッチ​​のような概念を計算していると想像できる限り遡ります。 「パッチ」という用語は、パンチカードの穴にテープが実際に貼られていることに由来しています。 しかし、これの全体的なポイントは、「デバッグ」という用語は、物理マシンのバグを見つけるというこの概念から生まれたということです。 それ以来、私たちは問題に対処するためにその用語を使用してきました。コンパイルしないプログラムでのコーディングの問題ではなく、うまく動作しないプログラムです。 そして、具体的にはプロファイルされていないだけでどこにも行かない終わらないループのようなものを見つけます。

しかし、シナリオもあります。もう少し詳しく説明する前に、面白いスライドをいくつか入れると思いました。 これがWeb上のXKCDと呼ばれる古典的な漫画で、漫画家は世界についてかなり面白い意見を持っています。 そして、これは「リトルボビーテーブル」と呼ばれる子供と、おそらく彼の両親がこの若い男の子をロバートと名付けたものです)。 DROP TABLE学生;-と呼ばれ、「こんにちは、これはあなたの息子の学校にコンピューターのトラブルがあります」と親は答えます、「ああ、親愛なる、彼は何かを壊しましたか?」そして先生は言います、「まあ、ある意味で」と先生は尋ねます、「あなたは本当にあなたの息子にロバートと名前を付けましたか?」; DROP TABLE学生;-?」そして、親は「ああ、そう、小さなボビーテーブルと呼んでいます」と言います。とにかく、彼らは今年度の学生記録を失ったと言い続けています。 そして、応答は、「さて、データベース入力をクリーンアップしてサニタイズする必要があります。」そして、コードで物事を見つける際に私たちが抱えている問題のいくつかについて話します。同様に。

もう1つ面白いのは、これが本当かどうかわからない-なりすましの疑いがあります-しかし、これもまた、私の面白い骨に触れています。 誰かが自分の車の前にあるナンバープレートを変更して、車のナンバープレートをキャプチャするスピードカメラなどをデータベースにドロップする同様の声明に変更しました。 そして、私は常に、プログラマーが実際の自動車によるコードのヒットと実行を予想していたことを疑いますが、それを過小評価しないでください-怒っているオタクの力。

(笑い)

しかし、これが私の重要なポイントにつながると思います。それは、昔々、コードをデバッグして、単なる人間としてプロファイリングできることでした。 しかし、私はその時が過ぎたという見方をとても強くしています。私の経験では、私の最初の話です。これは私をひどく老化させます。 ロビン、これを楽しんでくれますが、歴史的には、14歳の頃から街の端をさまよい、Newの「Data Com」というデータセンターのドアをノックしてきました。遅いバスを家に帰り、毎日約25 kmの通勤をし、紙をプリンターに入れ、テープをテープドライブに入れて、一般管理者になることで、学校で小遣いを稼ぐことができるかどうかを尋ねました。 不思議なことに、彼らは私に仕事を与えてくれました。 しかし、やがてスタッフを増やしてプログラマーを見つけ、コーディングが大好きで、スクリプトやバッチジョブを実行するプロセスを経験しました。 ミニプログラムのように見えるスクリプトとバッチジョブを作成し、3270端末に座って手作業でコードを作成するプロセス全体を実行する必要があります。

実際、私の最初の経験はテレタイプ端末で、実際には132カラムの物理プリンターでした。 基本的に、紙を巻いた非常に古いタイプライターのように考えてください。「CRTチューブがなかったからです。 そして、その上でコードをデバッグすることは非常に些細な問題であったため、すべてのコードを手で書いてからタイピストのように振る舞う傾向があり、エラーを忍び込まないように最善を尽くしました。特定の行に移動し、その行を印刷してから入力し直すための1行のエディター。しかし、昔々、それがコードの記述方法であり、デバッグの方法でした。 実際、それを修正するのは本当に面倒だったので、非常に優れたプログラミング技術を持たざるを得ませんでした。 しかし、旅はそれを経て-私たちは皆これに精通しています-私の世界での3270ターミナルの経験から、画面で物事を見ることができるデジタル機器VT220に行きましたが、あなたは同じことをしていましたCRTで紙テープのような印刷形式を使用しましたが、より簡単に削除でき、「dit dit dit dit」という音はありませんでした。

そして、Wyseターミナル(おそらく私のお気に入りのコンピューターへのインターフェイスであるWyse 150など)、そしてPC、Mac、そして最近ではWebベースの最新のGUIとIDを知っています。 そして、それを介した一連のプログラム、1つおよびアセンブラーでのプログラミング、PILOT、Logo、Lisp、Fortran、Pascal、および人々をingさせる言語。 しかし、これらはあなたが良いコードを書くことを余儀なくされた言語です。 彼らはあなたが悪い習慣を免れることはできませんでした。 C、C ++、Java、Ruby、Python –プログラミングの段階をさらに進めると、スクリプトのようになり、構造化クエリ言語や実際にSQLを呼び出すために使用されるPHPなどの言語にますます近づきます。 私の経歴から言って、私は多くの点で独学しました、そして、私を学ぶのを助けたものは、私がそうしないことを確認するために非常に良いプログラミング慣行と設計とプロセスに関する非常に良い慣行を教えましたバギーコードを導入します。

最近のプログラミング方法、たとえば、構造化照会言語、SQLなどは、非常に強力で単純な照会言語です。 しかし、私たちはそれをプログラミング言語に変えました。SQLが現代のプログラミング言語になるように設計されたとは本当に信じていませんが、それになるように歪めました。 そして、それは多くの問題をもたらします。なぜなら、コーディングの観点とDBAの観点の2つの観点から考えるときです。 貧弱なプログラミングテクニック、コード作成の怠zyな努力、経験不足、SQLの人々がGoogleに飛びついて何かを探してWebサイトを見つけるなど、私が持っている古典的な嫌悪感など、バグを紹介するのは非常に簡単です例を得て、既存のコードのコピーと貼り付けを行います。 そして、悪いコーディング、不正行為を複製し、それを本番に投入します。なぜなら、彼らが望む結果をたまたま与えるからです。 他の課題もあります。たとえば、最近私たちは皆、これに向かって急いでいます。私たちはレースをゼロにしようとしています。すべてを非常に安く、非常に速くしようとしています。 -有給スタッフ。 そして、それは不誠実な意味ではありませんが、私たちはすべての可能な仕事のために専門家を雇っていません。 むかしむかし、コンピューターに関わることはロケット科学でした。 それは、バカになって非常に騒がしいことや、宇宙に行ったり、技術者が学位を取得したり、狂ったことをするのを妨げた厳格な教育を受けた非常に有能な男性や女性に関係していました。

最近では、長年の経験がなく、必ずしも同じトレーニングやサポートを受けていない開発や設計、データベースに携わる多くの人々がいます。 そして、あなたはちょうど伝統的なアマチュア対専門家のシナリオで終わります。 そして、有名なラインがあります。実際に誰が見積もりを作成したか思い出せません。ラインは「仕事をするのに専門家を雇うのが高価だと思うなら、問題を起こすアマチュアの数人とあなたを雇うまで待ってください。 SQLにはその問題があり、非常に簡単に習得でき、非常に使いやすいです。 しかし、私の考えでは、完璧なプログラミング言語ではありません。 どこからでもスターを選択して、PHPやRubyやPythonのような使いやすいプログラミング言語にすべてを取り入れ、ネイティブに慣れているプログラミング言語を使用するなど、非常に簡単です。 SQLでより複雑なクエリを実行するのではなく、データ操作。 そして、私たちはこれをよく見ます。そして、人々はなぜデータベースが遅いのか疑問に思います。 何百万人もの人々がオンラインチケットシステムからチケットを購入しようとしているからです。オンラインチケットシステムでは、どこからでもスターを選びます。

さて、これは非常に極端な例ですが、そのすべてからポイントを得ることができます。 それで、そのポイントを家に本当にパンチするために、ここに私がたくさん持ち歩いている例があります。 私は数学が大好きで、カオス理論が大好きです。マンデルブロ集合が大好きです。 右側には、マンデルブロ集合の演出があります。 そして、左側には実際にそれをレンダリングするSQLがあります。 さて、これをどこかに画面に表示するたびに、「ああ、なんてこった、SQLでマンデルブロシリーズをレンダリングしたのか、本気ですか? まあ、その全体のポイントは、私がちょうどそこに概要を述べていたことを説明することであり、それは事実です。実際、SQLでほとんど何でもプログラムできます。 これは、非常に高度に開発された強力で最新のプログラミング言語です。 当初はクエリ言語でしたが、データを取得するように設計されていました。 そのため、非常に複雑な構造とストアドプロシージャがあり、プログラミング方法論が言語に適用されているので、貧弱なプログラミングプラクティス、経験不足、カットアンドペーストコード、高給のスタッフになろうとする低給のスタッフ、知っているふりをしている人、しかし彼らは仕事で学ばなければならない。

コードプロファイリングとデバッグと呼ばれるものの全範囲。これは、プログラムの動作を妨げるバグを見つけるのではなく、システムと構造の悪いコードを傷つけているバグを見つけることです。 今この画面を見ると、それはただ、ちょっとかわいいし、「なんて素晴らしいグラフィックなのか、それを実行したい」と思うと思います。しかし、ビジネスロジックの一部で実行することを想像してください。 。 かなりきれいに見えますが、数学的にグラフィカルにレンダリングされたカオス理論を話しますが、一部のビジネスロジックで潜在的に何を使用できるかを考えると、非常にすばやく画像を取得できます。 そして、それを本当に説明するために-そして、色が逆になってすみません、それは黒い背景であり、緑色のテキストである緑色のテキストであるはずですが、あなたはまだそれを読むことができます。

私が行って、あなたが本当にクレイジーでまったく経験がなく、プログラミングの異なるバックグラウンドから来て、C ++のようなものをSQLに適用した場合にあなたが潜在的にできることの例を見て、前に私のポイントを実際に説明しましたIDERAから学んだゲストに引き渡します。 これは、C ++のように記述された構造化クエリですが、SQLでコーディングされています。 実際に実行されますが、約3〜5分間にわたって実行されます。 そして、複数のデータベース、複数の結合から表面上は1行のデータを引き出します。

繰り返しになりますが、これの全体的なポイントは、適切なツールがなければ、これらのものをキャッチできる適切なプラットフォームと環境がなければ、それらが生産に入り、100, 000人の人がいるということです。毎日、1時間、1分ごとにシステムに衝突すると、すぐに大きな鉄が溶けて地球の中心に埋もれるチェルノブイリの経験になります。そのコードの一部は決して生産されるべきではないからです。 申し訳ありませんが、システムとツールは、テストプロセス、UAT、システム統合など、コードの一部をピックアップして強調表示し、誰かを脇に連れて行く必要があります。 「ほら、それは本当にきれいなコードですが、DBAを取得して、その構造化されたクエリを適切に構築できるようにしましょう。率直に言って、それは単に厄介です。」そして、URLがあるので、見てみましょう。これまでに作成した最も複雑なSQLクエリ。 「私を信じて、それは実際にコンパイルし、実行します。 そして、それをカットアンドペーストしてデータベースをモックアップするだけなら、それは注目に値するものです。 データベースを監視するツールを持っている場合は、3〜5分間かけて、1行のテキストをコールバックしてみてください。

要約すると、それを念頭に置いて、コーディングの私のすべてのバックグラウンドは、人々に銃を与えることができ、彼らが注意を払わなければ足で自分自身を撃つことを教えてくれました。 秘theは、安全メカニズムがどこにあるかを見せることです。 適切なツールと適切なソフトウェアを指先で使用すると、コーディングが完了した後、コードを確認したり、コードをプロファイリングすることで問題を見つけたり、パフォーマンスの問題である意図しないバグを効果的に見つけたりできます。以前は、昔々、緑色の画面を見ながらそれを行うことができました。 もうできません。 数十万行のコードがあり、数万のアプリがデプロイされており、場合によっては数百万のデータベースがあります。そして、超人でも実際にはこれを手作業で行うことはできません。 まさに文字通り、適切なソフトウェアと適切なツールを指先で必要とし、チームがそれらのツールを使用する必要があります。そうすれば、これらの問題を見つけて、非常に迅速に対処できます。ロビン・ブロアは、物事が悲惨になり、物事が爆発するか、より一般的には、彼らはあなたが多くのドルと多くの時間と労力を費やし始め、物事がうまくいかないときに士気やものを破壊し始める実行に長い時間。

それを念頭に置いて、私はゲストに引き渡します。この問題を彼らがどのように解決したかを聞くことを楽しみにしています。 そして特にデモは、私たちが受信しようとしていると思います。 エリック、お返しします。

エリック・カバナウ:オーケー、バート、それを取り去ってください。

バートスカルツォ:わかりました、ありがとう。 IDERAのBert Scalzoは、データベースツールのプロダクトマネージャーです。 そして、デバッグについてお話します。 前にロビンが言った最も重要なことの1つだと思います。そして、それはデバッグが面倒で非自明なことであり、データベースのデバッグに行くとさらに面倒で非自明なことです。重要な引用でした。

OK。 多くの場合、デバッグしていない人、デバッガを使用していない人、使用している言語でプログラムを作成している人、そして私に言われる人が多いからです「まあ、これらのデバッガーは新しいものであり、まだ使用し始めていません。」そして、私はこのタイムラインチャートを表示します。先史時代、古い時代、中世、それは親切ですプログラミング言語の観点から言うと、 また、1951年にアセンブリコード、Lisp、FACT、COBOLで始まる非常に古い言語がありました。 次に、次のグループであるPascalsとCs、そして次のグループであるC ++に進み、その疑問符がどこにあるかを調べます。疑問符は1978年から1980年頃のほぼ右側にあります。私たちが利用できるデバッガー、そして「ねえ、私はデバッガーを使っていないよ、それはそれらの新しいものの1つだから」と言うと、1950年代にプログラミングを始めたに違いありません。その主張を逃れる唯一の方法です。

さて、このチャートで面白いのは、DezがGrace Hopperについてコメントしたところです。実際に私はGraceを知っていたので、ちょっと面白いです。 そして、私が笑ったもう1つのことは、彼がテレタイプについて語ったことです。私はそこに座っています。「それは、生産性においてこれまでで最大の飛躍でした。カードからテレタイプに行ったとき、それはこれまでで最大のジャンプでした。だから、私はここですべての言語でプログラミングしました。SNOBOLは誰も聞いたことがない、それはCDC、Control Data Corporationだったので、私はこの業界では少し古くなっています。

Dez Blanchfield:私たちは、あなたは私たちがひどく高齢になったと言っていました。

バート・スカルツォ:ええ、私はあなたに言っています、おじいちゃんシンプソンのように感じます。 だから私はデバッグを見て、デバッグを行うさまざまな方法があります。 デバッガーに入ってコードをステップ実行する従来の方法として私たち全員が考えていることについて話しているかもしれません。 しかし、人々は自分のコードをインストルメントします。 ここで、コードにステートメントを挿入し、出力ファイル、トレースファイルなどを作成し、コードをインストルメントします。 私はそれをデバッグとして数えますが、それは少し難しい、それを行う方法ですが、それは数えます。 しかし、有名な印刷ステートメントもあります。実際に印刷ステートメントを配置し、実際に印刷ステートメントを配置します。デバッガーの使用方法がわからない場合、データベースツールであるツールを実際に見ました。ボタンを押すと、コード全体に印刷ステートメントが貼り付けられ、完了したら別のボタンを押すと、それらが削除されます。 それは多くの人がデバッグする方法だからです。

デバッグする理由は2つあります。まず、コードを無効にするものを見つける必要がありました。 言い換えれば、通常は論理的な間違いがあるか、ビジネス要件を逃したことを意味しますが、それはコードが有効ではないということです。 期待していたとおりには動作しません。 私たちが行ってデバッグをするとき、それは効率のためであり、それは論理的な間違いかもしれませんが、それは、私が正しいことをしたことです、それはちょうど十分に速く戻ってきません。 さて、その2番目のシナリオではプロファイラーの方がおそらく優れているため、デバッガとプロファイラーの両方について説明するため、その点を説明します。 さらに、このリモートデバッグの概念があります。 これは重要です。なぜなら、パーソナルコンピューターに座って、データベースでコードが実際に実行されるデータベースにヒットするデバッガーを使用している場合、多くの場合、実際にいわゆるリモートデバッグを実行しているからです。 気付かないかもしれませんが、それが起こっていることです。 そして、これらのデバッガーでは、ブレークポイント、ウォッチポイント、ステップインおよびステップオーバーなどの一般的なことを非常によく行いますが、それらをすぐに画面のスナップショットに表示します。

さて、プロファイリング:いくつかの異なる方法でプロファイリングを行うことができます。 一部の人々は、ワークロードがすべてをキャプチャする場所でキャプチャおよびリプレイし、それがプロファイリングとしてカウントされると言うでしょう。 私の経験では、サンプリングを行ったほうが良いでしょう。 すべてのステートメントをキャッチする理由はありません。一部のステートメントは非常に高速で実行されるため、気にしない場合があります。実際に表示しようとしているのは、繰り返し表示されるためです。実行時間が長すぎます。 したがって、プロファイリングは、すべてを実行するのではなく、サンプリングを意味する場合があります。 そして通常、使用できる何らかの出力が得られます。これは、IDE開発環境内で視覚的になり、さまざまなコード行のパフォーマンスのヒストグラムのように見えるかもしれませんが、トレースファイルを生成するということです。

プロファイラーは1979年に初めて登場しました。したがって、それらも長い間存在していました。 リソースの消費、またはパフォーマンスの問題、つまり効率の問題を見つけるのに最適です。 一般的に言えば、デバッガーとは別個のものであり、別個のものですが、同時に両方を行うデバッガーを扱っています。 そして、私はプロファイラーが2つのツールの中でより興味深いと思いますが、10人のデバッガのうち1人がプロファイリングするので、十分な人がデバッグしていない、そして間違いなく十分な人がプロファイリングしていないと感じたら プロファイリングは大きな違いを生む可能性があるため、それは残念です。 さて、先ほど説明したように、データベース言語にはSQLがあります。そして、ここで丸穴を四角い穴に押し込み、プログラミング言語にすることを強制しました–そしてOracle。 PL / SQL、つまり手続き型言語のSQLです。SQLServer、Transact-SQL、SQL-99、SQL / PSMです。これは、プロシージャストアドモジュールだと思います。 Postgresは別の名前、DB2、さらに別の名前、Informixを付けていますが、ポイントは誰もが3GLタイプの構造を強制していることです。 言い換えると、変数宣言でのFORループ、およびSQLに関係のない他のすべてのものは、これらの言語のSQLの一部になりました。 したがって、Visual Basicプログラムと同様に、PL / SQLまたはTransact-SQLをデバッグできる必要があります。

さて、データベースオブジェクト、これは重要です。人々が「さて、データベースでデバッグする必要があるものは何ですか?」と言うからです。そして、答えは、データベースにコードとして保存できるものは何でも-私がやっていればT-SQL、またはPL / SQL –データベースにオブジェクトを保存していますが、おそらくストアドプロシージャまたはストアド関数です。 しかし、トリガーもあります。トリガーは、ストアドプロシージャのようなものですが、何らかのイベントが発生すると起動します。 トリガーの一部の人々は、1行のコードを入れてストアドプロシージャを呼び出して、すべてのストアドコードとプロシージャを保持しますが、それは同じ概念です:トリガーが全体を開始する可能性があります。 そしてOracleとして、彼らはパッケージと呼ばれるものを持っています。それはあなたがそうするならライブラリのようなものです。 50個または100個のストアドプロシージャをパッケージと呼ばれる1つのグループに入れるため、一種のライブラリのようになります。 それで、ここに古い方法のデバッガーがあります。 これは、実際には、これらのデバッグステートメントをすべて実際にコードに挿入するツールです。 したがって、デバッグブロックが表示されるすべての場所で、自動デバッガーの起動とトレースを削除しないでください。これらはすべて、何らかのツールによって立ち往生しています。 そして、それ以外の行はコードの少数ですが、それは非手動のデバッグ方法です。

そして、私がこれを取り上げる理由は、手でこれを行おうとすると、実際には、コードを使用しているよりも多くのデバッグコードを入力して、これらすべてのprintステートメントを挿入することになるからです。 したがって、これは機能する可能性がありますが、それは何よりも優れていますが、これはデバッグするのが非常に難しい方法です。特に、このものの実行に10時間かかり、問題がある場所が3行目である場合はどうですか? 対話型のデバッグセッションを行っていた場合、3行目-5分で-ちょっと問題がありました。終了できます。 しかし、これでは、実行が完了するまで待機する必要があり、その後、おそらくこれらのすべての印刷ステートメントを含むトレースファイルを見て、針を試してみてください干し草の山。 繰り返しになりますが、これは何もしないよりはましですが、動作するための最良の方法ではありません。 さて、これはそのファイルが前のスライドから来たように見えるものです。 言い換えれば、私はプログラムを実行しましたが、このトレースファイルに大量の印刷ステートメントがあり、これをサイフォンで探して、必要なものを見つけることができる場合とできない場合があります。 だから、再び、これがあなたが働きたいと思う方法であるかどうか私はよく分からない。

さて、対話型デバッガー-Visual Studioなどのプログラムを使用してEclipseやEclipseを使用した場合、デバッガーがあり、他の言語で使用したことがありますが、データベースで使用することは考えていませんでした。 DB ArtisanやRapid SQLなどのツールがあります。これはここにあるRapid SQLです。これにはデバッガがあり、左側に「重複のチェック」というストアドプロシージャがあります。基本的に、テーブルに同じ映画タイトルの複数の行があるかどうかを確認します。 したがって、データベースは映画用です。 右側、上部3分の1に、ソースコードが中央にあり、監視変数とコールスタックトレイと呼ばれるものがあり、下部にあることがわかります。いくつかの出力メッセージがあります。 ここで重要なのは、最初の赤い矢印を見て、変数の上にマウスを置くと、コードをステップ実行しているときに、その時点でその変数にどのような値があるかを実際に確認できることです。 そして、それは本当に便利です。そして、コードを一度に1行ずつ実行できます。実行と言う必要はありません。行を1行と言って、何が起こったのかを見てみましょう。 、データベースでこれを行っています。 また、PCでRapid SQLを使用していて、データベースがクラウドにある場合でも、リモートデバッグを実行して、ここからそれを確認および制御し、他の言語と同様にデバッグを実行できます。

さて、次の矢印-右に、そのDBMS出力に向かって右を指す小さな矢印が表示されています。これが現在カーソルがある場所です。つまり、私はステップを踏み、そこにいるのです瞬間。 ですから、「もう一度」と言ったら、次の行に行きます。 そのすぐ下に、赤い点が表示されます。 まあ、それはブレークポイントであり、「ねえ、これらの行をステップオーバーしたくない」と言います。すべてを飛び越えてその赤い点に到達したい場合は、実行ボタンを押すと実行されますここから最後まで、またはブレークポイントが設定されている場合は、ブレークポイントまで停止すると、停止して再度ステップ実行できます。 そして、これがすべて重要で強力な理由は、私がこれをすべて行うと、真ん中や最下部でも何が起こっているのか、最も重要なことは真ん中が変わって、変数から値を見ることができるからです。コールスタックトレースを確認できるので、コードをステップ実行しているときにすべての情報がそこに表示されるので、実際に何が起こっているのか、実際にどのようにコードが行われているかを見て感じ、理解することができます実行時に動作します。 通常、問題がある場合、または問題を検出するのに十分な場合、問題を見つけることができます。

さて、プロファイラーについてお話します。この場合、これはデバッガーを通して見ることができるプロファイラーです。 私は時々彼らは別々で、時には彼らは一緒になることができると言ったことを覚えていますか? この場合、また、私はRapid SQLを使用しています。左側の行番号の横にマージンがあります。 つまり、それはコードの各行を実行するのにかかった秒数またはマイクロ秒数であり、表からすべてを選択するこの1つのFORループにすべての時間が費やされていることがはっきりとわかります。 。 したがって、そのFORループ内で発生していることはおそらく検討する必要があるものであり、それを改善できれば、それは利益をもたらします。 0.90や0.86のような行で作業しても、改善されることはありません。 そこに費やす時間はあまりありません。 さて、この場合、そして再び、私はRapid SQLを使用しています。デバッグと混合したプロファイリングをどのように行うことができるのかがわかります。 現在、Rapid SQLを使用すると、他の方法でも実行できます。 Rapid SQLでは、「あなたは何を知っていますか? デバッガーにはいりません。ただこれを実行したいので、同じタイプの情報をグラフィカルまたは視覚的に見たいです。」

そして、私はもはやデバッガーではなく、プログラムを実行し、実行が完了した後、それは私に物事を伝えるためのチャートを与えて、それが取っているように見える1つのステートメントを持っていることがわかります円グラフのほとんどで、私が見ると、グリッドの一番下の23行目にあります。再びFORループがあります。彼はほとんどの時間を費やしており、実際には、暗い赤がすべての円グラフを噛んでいます。 そして、これはプロファイリングを行うための別の方法です。 私たちは、ツールで「コードアナリスト」と呼びます。 しかし、それは基本的にデバッガーから分離されたプロファイラーです。 最初の方法でそれをしたい人もいれば、2番目の方法でそれをしたい人もいます。

なぜデバッグとプロファイリングを行うのですか? 世界最大のコードを書いて昇給を望んでいるからではありません-それが私たちの理由かもしれませんが、それがあなたがそうする理由ではないのです-あなたがあなたのプログラムが効果的であることをあなたはビジネスを正しくすることを約束しました。 これがデバッガーの使用目的です。 さらに、ビジネスエンドユーザー。 彼らはあまり忍耐強くありません。彼らはキーを押す前でも結果を望んでいます。 私たちは彼らの心を読み、即座にすべてを行うことになっています。 言い換えれば、効率的でなければなりません。 そして、それが私たちがプロファイラーを使用するものです。 さて、これらのツールがなければ、あなたは弓と矢を持ったビジネススーツを着たこの男であり、ターゲットを狙っていて目隠しされていると本当に信じています。 静的コードを見るだけでプログラムの実行方法をどのように見つけ、静的コードを見るだけで、どの行が実際に実行に最も時間を費やすのかをどのように見つけるのですか? コードレビューはこれらのことのいくつかを明らかにするかもしれないし、しないかもしれませんが、コードレビューがそれらすべてを見つけるだろうという保証はありません。 デバッガとプロファイラを使用すると、これらのすべてのバグを見つけることができるはずです。

OK、ここで実際の簡単なデモを行うだけです。 製品をプッシュするつもりはありません。「これまで見たことがない」と何度も言われるため、デバッガーがどのように見えるかをお見せしたいだけです。 、しかし、動いているときはどのように見えますか? そのため、ここで画面上でDB Artisan製品を実行しています。 そこにもデバッガがあります。 DB ArtisanはDBA向けであり、Rapid SQLは開発者向けですが、DB Artisanを使用する開発者やRapidを使用するDBAを見てきました。 だから、製品に巻き込まれないでください。 ここでは、デバッグを行うことを選択できますが、デバッグを開始する前にこのコードを抽出して、実行を開始する前にコードがどのように見えるかを確認します。 そのため、ここにスクリーンスナップショットとまったく同じコードがあります。これは重複のチェックです。 そして、これをデバッグしたいので、デバッグを押します。 そして今、少し時間がかかり、「まあ、なぜちょっと時間がかかるのか」と言うでしょう。リモートデバッグを思い出してください。デバッグは、PCではなくデータベースサーバーで実際に行われています。 そのため、あちこちでセッションを作成し、リモートデバッグを作成し、セッションをそのリモートデバッグセッションにフックして、通信チャネルを設定する必要がありました。

だから、今、ここに私の矢印があります、それは行の一番上にあります、それはコードの中で私がいるところです。 そして、そこにある3番目のアイコンを押すと、その矢印がちょうど移動したのがわかります。押し続けると、移動し続けるのがわかります。 さて、このFORループまでずっと行きたいのであれば、問題がどこにあるかわかっているので、ブレークポイントを設定できます。 設定したと思った。 ああ、スクリーンキャプチャキーの1つをデバッガーと同じキーにマップしました。これが混乱の原因です。 OK、そこで手動でブレークポイントを設定するだけなので、今度はステップ、ステップ、ステップ、ステップを実行する代わりに、そこに着くまで「実際に実行してください」と言うだけで、停止します。 それがブレークポイントに至るまでずっと私を動かしたことに注意してください、それで私はこのループを実行するコンテキストに今いるのです、私はすべての変数が設定されているものを見ることができます、それは驚くことではありませんゼロに。 そして今、私はこのループに足を踏み入れ、このループ内で何が起こっているのかを見始めることができます。

だから、今、私のレンタルから選択カウントを行い、その男の上にマウスを置いて見ることができます、彼は2です、2は1よりも大きいので、おそらくこのコードの次の部分を行うでしょう。 言い換えれば、何かを見つけました。 私は先に進み、それを実行させます。 ここですべてを説明したくありません。 デバッガーが完了したら、通常のプログラムと同じように終了します。 ブレークポイントが設定されているので、実行と言ったとき、次のブレークポイントに戻りました。 私はそれを最後まで実行させています、「私はあなたが見て欲しいのは、デバッガがプログラムの動作を変更しないということです:実行が完了したら、実行していなければまったく同じ結果を得るはずですデバッガー内。

それで、質問と回答のための時間があることを確認したいので、デモを一時停止してから戻ります。 そして、私は質問と回答のためにそれを開きます。

エリック・カバナ:わかった 、ロビン、多分あなたからの質問と、それからデズからのカップル?

Robin Bloor:ええ、もちろん、私はこれが魅力的だと思います。 私はこのようなものを扱ったことがありますが、データベースでこのようなものを扱ったことはありません。 ユーザーがプロファイラーを使用する目的を教えてもらえますか? なぜなら、彼らはパフォーマンスの問題を見ているのだと思います(「そうだと思うから)」、データベースに時間がかかるのとコードに時間がかかるのを見分けるのに役立ちますか?

Bert Scalzo:それは素晴らしい質問です。 私がVisual Basicで作業しており、Visual Basic内でTransact-SQLまたはPL / SQLを呼び出すとします。 OracleはMicrosoftのツールと常にうまく機能しないため、PL / SQLを実行します。 私はVisual Basicコードをプロファイリングしているかもしれませんが、そこのプロファイルに「ねえ、このストアドプロシージャを呼び出して時間がかかりすぎました」と言うかもしれません。しかし、その後、ストアドプロシージャに進み、ストアドプロシージャでデータベースプロファイルを実行できます「OK、ここにある100のステートメントのうち、問題を引き起こしている5つがここにあります。」そして、複数のプロファイラーを使用する必要があるタグチームが必要になる場合があります。

データベースにパフォーマンスの問題があると言われたら、データベースプロファイルを使用すると、実際に問題が発生しているステートメントが実際にあるヘイスタック内の針を見つけることができます。 プロファイリングで明らかになった別のことを教えてください:100万回呼び出されるコードがあり、100万回ごとに1マイクロ秒しかかからないが、プロファイラーが示すもの、そのことはこの多くの時間単位で実行されました。 そのため、コードは非常に効率的かもしれませんが、「ああ、このコードを頻繁に呼び出しています。 レコードを処理するたびに呼び出すのではなく、頻繁に呼び出す必要があるかもしれません」などです。 そのため、実際には、頻繁に呼び出されるだけの効率的なコードがある場所を見つけることができます。これは実際にはパフォーマンスの問題です。

Robin Bloor:ああ、それは素晴らしい。 私はこれをやったことがありません。 もちろん、データベースの問題が発生したときは、何らかの方法でデータベースを処理するか、コードを処理するかのように見えました。 両方を同時に扱うことはできませんでした。 しかし、ここでも、私はしませんでした。ストアドプロシージャを使用したアプリケーションの構築に実際に関与したことはありません。そのため、私を暴走させる問題に実際に遭遇したことはありません。データベースとプログラムの間でコードを分割しました。 しかし、そう、すべてを行う-私は答えがイエスになるだろうと推測していますが、これはあなたが何らかの形で壊れているものを修正しようとしている、または多分新しいものを持ち込もうとしているときの開発チームの活動の一部です一緒にアプリケーション。 しかし、これはすべて、私が環境に期待する他のすべてのコンポーネントに合わせて調整されていますか? これをすべてのテストパックと、これから行うプロジェクト管理プロジェクトと一緒にクリップできると期待できますか?

Bert Scalzo:ええ、プログラミングや開発の取り組みを行うための構造化プロセスの一部になることができます。 そして、面白いことに、先週、Webアプリケーションを構築している顧客がいましたが、彼らのデータベースは歴史的に小さく、そのため彼らがあまり良いプログラマーではなかったという事実は決して彼らを傷つけませんでした。 彼らのデータベースは長年にわたって成長しており、現在、Webページで「ログインして表示するデータを提供してください」と言ってから画面が実際に表示されるまでに20秒かかります。パフォーマンスの問題。 そして、彼らは問題が彼らのJavaのいずれかまたはそれらの他の場所のいずれにもないことを知っていました。 しかし、彼らは何千ものストアドプロシージャを持っているので、このWebページが表示されるのに20秒かかる理由を調べるために、ストアドプロシージャのプロファイリングを開始する必要がありましたか? そして実際に、selectステートメントの1つにデカルト結合があり、それを知りませんでした。

Robin Bloor:わあ。

Bert Scalzo:しかし、誰かが私に「どうしてデカルトに参加して、それを知らないのか」と言った。そして、これは本当に恐ろしいことだろう。 SQLにあまり馴染みのないプログラマーは、デカルト結合を与えるようなことをしますが、最初のレコードだけを返すので、私は何かを得たので、最初のレコードだけが必要です。 そして、彼らは、自分が興味を持っているものを手に入れたので、10億のレコードを持ち帰ったことや、10億のレコードを調べていることに気付いていません。

Robin Bloor:うわー、それが呼ばれていることです。まあ、それはDezが起こっていたことです。 プログラマーなら、コマンドを発行することの意味を知っておく必要があります。 本当に、そのレベルの愚かさの言い訳はありません。 また、あなたは何らかの形で、これに関しては言語にとらわれないのだと思います。なぜなら、これはすべてデータベース側に焦点を合わせているからです。 私はその中で正しいですか? コーディング側で使用しているものは何でも同じですか?

Bert Scalzo:もちろん 、FortranまたはCまたはC ++でこれを行うことができます。 実際、一部のUnixでは、スクリプト言語でも実行できます。 実際には同じツールを提供します。 そして、あなたが言い訳なしに言ったことを一秒前に戻したいです。 私はプログラマーに一休みを与えます。なぜなら、プログラマーをバスに放り込むのは好きではないからです。 しかし、問題は本当にアカデミックな環境です。なぜなら、プログラマーになる方法を学ぶために行くとき、あなたはレコードごとの思考を教えられるからです。 セット思考については教えられません。それが、構造化照会言語、またはSQLがセットで機能することです。 そのため、ユニオン、インターセクト、マイナス演算子があります。 そして、セットのことを考えたことのない人にとっては、やめたり、一度にレコードを処理したり、セットを操作したりすることが非常に難しい場合があります。

Robin Bloor:ええ、私はあなたと一緒です。 つまり、これは教育の問題です。 それは完全に教育の問題だと思います。プログラマーが手続き的に考えるのは自然なことだと思います。 また、SQLは手続き型ではなく、宣言型です。 あなたは実際に「これは私が望むものであり、あなたがそれをどうやってやっても構わない」と言っているだけです。 一方、プログラミング言語では、袖をまくり上げて、ループをしながら、カウントを管理するという細かい点に陥りがちです。 引き渡します-

バートスカルツォ:いいえ。

ええ、私はあなたがプロファイラーがこの記録を一度に処理するようなものをキャッチするのが良いだろうという別の例を挙げたと言っていました。 時々、レコードごとのロジックが得意なプログラマーは、SQLプログラムの実行方法を理解できないことがあります。 さて、彼は2つのFORループを作成し、基本的に結合を行いますが、彼はクライアント側でそれを行います。 したがって、彼は結合と同じ効果を実行していますが、彼は自分でそれを実行しています。プロファイルはそれをキャッチします。おそらく、データベースサーバーに実行させるよりも手動でより多くの時間を費やすことになります。

Robin Bloor:ええ、それは災害になります。 つまり、あなたはただただ動き回っているだけだ。 スラッシングは常に悪いことです。

とにかく、私はDezに引き渡します。 彼には興味深い質問がいくつかあると思います。

Dez Blanchfield:ありがとう、そうだね。 私はあなたをバスの下に投げないプログラマに参加させます。 つまり、自分の人生でコーダーとして何年も費やしてきました。あらゆるレベルで、あなたが言った通り、Unixマシンのコマンドラインに座っていて、場合によっては私も関わりましたあるハードウェアプラットフォームから別のプラットフォームへのUnixのいくつかの異なるポートで。 そして、そこにあった課題を想像することができます。 しかし、現実は、世界中のすべてのコーダーとスクリプターのための脱獄カードです。 ロケット科学であり、文字通り、毎回非常にタイトに書くことは常にロケット科学です。 そして、デニス・リッチーやブライアン・カーナハンのような人々がいくつかのコードを独立して作業し、コーヒーを飲みながらコードレビューチャットに出て、まったく同じプログラムでまったく同じコードを書いたことがわかったという有名な物語、まったく同じ方法で。 そして、彼らはCでそれをしました。しかし、その純粋なレベルのプログラミングは非常にまれにしか存在しません。

事実、毎日、1日は24時間、1週間は7日しかなく、作業を完了する必要があります。 したがって、従来のプログラマーだけでなく、DBA、コーダー、スクリプト作成者、システム管理者、ネットワーク管理者、セキュリティスタッフなど、最近の市民データ側に至るまでのすべてのことに関して言えば、 みんなが自分の仕事をしようとしているだけだと聞いています。 そして、この全体からの重要なポイントは、あなたのデモが大好きで、ほんの少し前にあなたが私たちに残したお持ち帰りが大好きだったと思います。ニッチ–しかし、コードとSQ​​Lおよびデータベースの修正に関する限り、それが適用される広いスペース。 しかし、今日の時代では常にすべてのコストを最小限に抑えているため、シェルスクリプトで突いて問題を見つけることができると言うのを聞いて本当に興奮しました。

あなたがどこかで6ドルのシャツを買うことができる理由は、誰かが実際に製造し、出荷し、ロジスティックに配達し、販売し、小売し、その6ドルのシャツを得るためにオンライン支払いを取るのに十分なシステムを構築したからです。 そして、完璧な方法でコードを書くために年間40万ドルを支払われる人がいる場合、それは起こりません。 それは開発全体です。 ですから、その点、私はあなたにもっと洞察力を与えることを本当に愛している質問の1つは、これらの種類のツールをプロファイリングするために現在見ているタイプの人々の広さと範囲ですコードとパフォーマンスの問題を探しますか? 当初、歴史的に、彼らはどこから来たのですか? 彼らは大きなエンジニアリングハウスでしたか? そして、今後は、そうです、仕事を終わらせるためにただ物事を成し遂げている人を知っているコーダーを助けようと、より多くの企業がこのツールまたはこれらのツールを実装していると思うのは正しいですか?ドアから出して? また、脱獄カードが必要な場合がありますか? 歴史的に、私たちはよりエンジニアリングの焦点と開発があったと思いますか? ロビンが言ったように、今ではアカデミックなアプローチが減ってきており、今では独学で、つまりカットアンドペーストでコードを作成しているのか、それとも単に構築するだけなのか? そして、それは今製品を取っている人の種類に一致しますか?

Bert Scalzo:ええ、まさに。 そして、私はあなたに非常に具体的な例を挙げます、私たちは仕事を終わらせたいだけなのです。なぜなら、ビジネスマンは完璧を望んでいないからです。 コンピュータ化されたチェスゲームのようなものです。チェスゲームは完璧な答えを探していません。 妥当な時間内に十分な答えを探すので、それが私たちのプログラミング方法です。 しかし、私が今見つけているのは、ほとんどの人がユニットテストの一部としてプロファイラーを望んでいると言うのではなく、それが私がそれを行う方法です、「私はそれを時間の無駄だとは思わないからです」何が起こっているのですか?運が良ければ、統合テストまたはストレステスト中に、後でそれが行われることもあります。 しかし、ほとんどの場合、それはエスカレーションの一部であり、何かが生産に入り、しばらく実行され、おそらく何年も実行され、現在はうまく動作していません。今すぐプロファイルします。 そして、それは現在、より一般的なシナリオのようです。

Dez Blanchfield:ええ、そして「技術的負債」という言葉はおそらくあなたがよく知っているものだと思います。 私はロビンを知っており、確かにそうです。 私は最近、特に開発とシステム構築に対するアジャイルなアプローチにおいて、技術的負債の概念は現在非常に現実的なものであり、実際にプロジェクトで説明していると思います。 Media Lensなどの独自のプロジェクトがあり、毎日コーディングが行われているほか、Bloor Group全体でさまざまなことを行っています。 そして何かを構築するときはいつでも、私はそれを見て、私はそれを見て、常に今すぐこれを修正するのに何がかかるのかという観点から見ていきます。そこにそれを出すことができて、それからこの事が壊れるかどうか見て、見てください。 そして、この技術的負債を引き継ぎます。これは、後で戻って修正する必要があることを知っています。

そして、私は過去7日間でそれをやったということです:私はいくつかのツールとスクリプトを書き、Python言語をいくつか書き、それをMongoバックエンドに展開し、それは素晴らしく、きれいで安全ですが、より大きなパズルに到達するには、その関数が機能する必要があることを知って、必要なクエリを取得するだけです。 それが私の本当の痛みです。 そして、あなたはこの技術的な負債を被ります。そして、これは今や時折のものではなく、これは今の発展のDNAの一部だと思います。 人々は-不誠実ではなく-技術的負債を受け入れるだけで、通常の手口の問題であり、ただそれを被らなければなりません。 技術的な負債が発生する場所です。 デモで見せてくれたのは、文字通りプロファイルを作成して、実行にかかる時間を見ることができるのが素晴らしいことだと思います。 それはおそらく私のお気に入りの一つです。 つまり、プロファイリングツールを実際に構築しました。Sed、Lex、およびOrcでツールを構築してコードを実行し、このようなツールが利用可能になる前にループの場所を確認しました。あなた自身のコードをレビューすれば、あなたはあなた自身のコードをレビューする必要がないのが得意です。 しかし、今はそうではありません。 それを念頭に置いて、これを他のどの市場よりも取り上げている特定の市場セグメントはありますか? 質量のように見える-

Bert Scalzo:ああ、そうだね。あなたのために類推をして、プログラマー以外の人がいつもそれをしていることを示すつもりだ。 「デバッガを教えてクラスやセッションのプロファイリングをする場合、「OK、ここにいる人は何人Microsoft Wordにアクセスし、意図的にスペルチェッカーを使用しないのか」と尋ねます。そして、誰も手を挙げません。なぜなら、文書を書くために、私たちは皆、英語の間違いを犯す可能性があることを知っているので、誰もがスペルチェッカーを使用するからです。 そして、私は言った、「さて、Visual BasicのようにIDEでテキストを書いているときに、デバッガを使用していないのはなぜですか? それは同じことです、それはスペルチェッカーのようなものです。」

Dez Blanchfield:ええ、実は、それは素晴らしいアナロジーです。 私は本当に考えていませんでした、私は実際に私が使用するいくつかのツールで同じようなことをすることを認めなければなりません。 実際、Eclipseで私のお気に入りの1つであるODFは、そこにコードをカットアンドペーストし、すぐにハイライト表示するものを探して、クラスコールでタイプミスをしたことに気付きます。 そして、今ではこのようなツールを使用すると、戻ってきて後で見るのではなく、リアルタイムで実行できるので興味深いです。 しかし、ええ、それはワードプロセッサにテキストを入力するだけの素晴らしいアナロジーです。これは興味深いウェイクアップコールだからです。タイプミスや文法エラーを犯したことに気づくだけですよね?

バート・スカルツォ:その通り

Dez Blanchfield:では、Q&Aに参加する前に、参加者に向けた最後の質問だと思います。 これを行うためのアプローチに関して何らかの種類の推奨事項を提示しようとした場合(これは修辞的であると想定しています)、開発を始める前に、開発中に早めに導入して実装する必要がありますか? それとも、あなたが主に構築し、動いて、何かを構築してから入って、後でプロファイルするという場合ですか? 私はそれが早期に取得し、あなたのコードが前もってきれいであることを確認する場合だと思う。 それとも、展開後のこの部分を検討する必要があるのでしょうか?

Bert Scalzo:理想的には、彼らは前もってそれをするでしょうが、誰もがちょうど物事を成し遂げなければならないh騒の世界にいるので、彼らは解決できないパフォーマンス問題に遭遇するまでそれをしない傾向があります仮想マシンにCPUとメモリを追加します。

Dez Blanchfield:ええ。 それで、私がすぐにできるなら、あなたは実際にあなたが面白い何かに言及した? これはどこからでも実行でき、バックエンドでデータベースと通信できることを前に述べました。 ですから、これは、バックエンドと話して見ることができる場合、物事の見た目で、オンプレミス/オフプレミスクラウドの、今話しているバイモーダルコンセプトのようなものに快適ですコード、それは本当に気にしませんか?

Bert Scalzo:まさにそう、これをクラウドで実行できます。

Dez Blanchfield:素晴らしい、「新しい勇敢な世界がどこに向かっているのだと思うから」 エリック。 すぐに返事をして、ここでいくつか質問があることを確認します。1時間を過ぎても、参加者に引き続き滞在してもらいたいと思います。

エリック・カバナ:ええ、そこには少数の人々がいます、私はすぐにコメントします:バート、私はあなたが比spell、スペルチェックの使用に与える類推は率直に素晴らしいと思います。 それはあなたがしていること、それがどれほど価値があるか、そしてデバッガーを使用するためのベストプラクティスであるべき方法のコンテキストを組み立てるための良い方法だからです。定期的にね それを捨てると、うなずきますよね?

バート・スカルツォ:絶対に、私が彼らに言うのは、「文書のスペルチェックを行うのはなぜですか? まあ、彼らは愚かなコーディングの間違いに恥ずかしくはありません!

エリック・カバナ:そうです。 はい、確かに。 さて、皆さん、ここで1時間5分間燃え尽きました。皆さんの時間と注意に感謝します。 これらすべてのWebチャットをアーカイブし、いつでも戻ってチェックしてください。 これらのリンクを見つけるのに最適な場所はおそらくtechopedia.comなので、ここでこのリストに追加します。

それで、皆さん、お別れを申し上げます。 繰り返しますが、素晴らしい仕事です、バート、IDERAの友人に感謝します。 次回はお話しします。実際、来週はお話しします。 気を付けて! バイバイ。

迅速な対応:データベースのデバッグとプロファイリングによる救助