迅速な対応:Rescueへのデータベースのデバッグとプロファイリング

著者: Roger Morrison
作成日: 22 9月 2021
更新日: 1 J 2024
Anonim
【MySQL入門決定版】2時間半で学ぶ初心者向けMySQLデータベースチュートリアル【MySQLの基本とSQLの基礎文法の徹底的にマスター】
ビデオ: 【MySQL入門決定版】2時間半で学ぶ初心者向けMySQLデータベースチュートリアル【MySQLの基本とSQLの基礎文法の徹底的にマスター】

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



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

エリック・カバナ: みなさん、水曜日の東部標準時の4時です。もちろんです。

ロビン・ブロア: エリック

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

本当にあなたについての場所があります。もちろん、@ eric_kavanaghを見つけてください。

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

Dr. Robin Bloor、そして私たち自身のDez Blanchfieldの下から、そしてもちろん、私たちの親友であるIDERAのBert Scalzoから聞いてください。そして実際、私はロビン・ブロアに鍵を渡そうとしています。床はあなたのものです。


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

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

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


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

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

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

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

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

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

エリック・カバナ: それを渡す、待機する、ちょっと待って。

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

エリック・カバナ: よし、1秒待って、Dezにボールを渡そう。

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

だから、都市の神話は9月9日頃のあのラウンドです番目、1945年、ハーバード大学のチームがマシンを引き離し、「リレー70」と呼ばれるものに遭遇しました。当時、プログラミングは物理的な意味で行われ、ボードにコードを巻き付けていました。マシン–そして、彼らはこのリレー番号70に何か問題があることを発見し、実際には「バグ」という用語が出てきたことがわかりました。ある場所から別の場所へ。そして、このキャプションとしての伝説のグレース・ホッパーは、私のタイトルのスライドで「バグが見つかった最初の実際のケース」という引用を引用しています。

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

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

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

(笑い)

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

実際、私の最初の経験はテレタイプ端末で、実際には132カラムの物理的エラーでした。基本的に、紙がスクロールする非常に古いタイプライターのように考えてください。CRTチューブがないためです。そして、その上でコードをデバッグすることは非常に些細な問題ではなかったので、あなたはすべてのコードを手で書いてからタイピストのように振る舞う傾向があり、エラーを忍び込まないように最善を尽くしました特定の行に移動してからもう一度入力するための1行のエディター。しかし、昔々、それがコードの記述方法であり、デバッグの方法であり、非常に非常に優れていました。実際、それを修正するのは本当に面倒だったので、非常に優れたプログラミング技術を持たざるを得ませんでした。しかし、旅はそれを経て、これに慣れ親しんでいました。私の世界での3270ターミナルの経験から、画面で物事を見ることができるDigital Equipment VT220に行きましたが、ここでも同じことをしていました。紙テープではCRTのようなed形式ですが、より簡単に削除でき、「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などの言語にますます近づきます。バックグラウンドから言うと、私は多くの点で独学であり、学習に役立つものは、非常に優れたプログラミングプラクティスと、設計とプロセスに関する非常に優れたプラクティスを教えて、バギーを導入しないようにしましたコード。

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

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

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

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

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

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

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

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

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

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

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

さて、このチャートで面白いのは、DezがGrace Hopperについてコメントしたことです。私は実際にGraceを知っていたので、その種類は面白いです。そして、私が笑ったもう一つのことは、彼がテレタイプとそこに座っていることについて話したことです。そして、私はこれまでに聞いたことのないSNOBOLを含むすべての言語でプログラミングしました。これはCDCであり、Control Data Corporationだったので、この業界では少し古くなっています。

デズ・ブランフィールド: 私は言うつもりだった、あなたは私たちがひどく老化した。

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

デバッグする理由は2つあります。まず、コードを無効にするものを見つける必要がありました。言い換えれば、通常は論理的なミスがあるか、ビジネス要件を逃したことを意味しますが、それはコードが効果的ではないということです。期待したことはしません。私たちが行ってデバッグをするとき、それは効率のためであり、それは論理的な間違いかもしれませんが、それは私が正しいことをしたということです。今、私はその点を指摘します。なぜなら、プロファイラーはおそらくその2番目のシナリオに適していて、デバッガーとプロファイラーの両方について話すつもりだったからです。さらに、このリモートデバッグの概念があります。これは重要です。なぜなら、あなたがあなたのパソコンに座って、あなたがあなたのデバッガーを使って、データベース上で実際にコードが実行されているデータベースにアクセスし、あなたが実際にリモートデバッグと呼ばれることをしているならです。あなたはそれを理解しないかもしれませんが、それが起こっていることです。そして、これらのデバッガーでは、ブレークポイント、ウォッチポイント、ステップインとステップオーバー、その他の一般的なことを非常に一般的にしています。それらをすぐに画面のスナップショットに表示します。

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

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

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

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

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

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

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

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

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

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

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

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

それで、私はデモを中断して戻って、質問と回答の時間があることを確認したいと考えています。そして、私は質問と回答のためにそれを開きます。

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

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

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

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

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

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

ロビン・ブロア: ワオ。

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

ロビン・ブロア: うわー、私は知っている、それは何と呼ばれている-まあ、それはデズが起こっていたこと、それはおそらく彼らが本来あるべきほど正確ではない人々の観点から、あなたが知っている。プログラマなら、コマンドを発行することの意味を知っておく必要があります。本当に、そのレベルの愚かさの言い訳はありません。また、何らかの方法で、これに関しては言語にとらわれないことを前提としています。これはすべてデータベース側に焦点を当てているからです。私はその中で正しいですか?コーディング側で使用しているものは何でも同じですか?

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

ロビン・ブロア: ええ、その上であなたとイム。つまり、教育の問題です。これは完全に教育の問題だと思います。プログラマーが手続き的に考えるのは自然なことだと思います。また、SQLは手続き型ではなく、宣言型です。あなたは実際に、「これが私が欲しいものであり、あなたがそれをどうするか気にしません」と言っているだけです。一方、プログラミング言語を使用すると、ループを実行しながら、袖をまくり上げて、カウントを管理するという細かい点に至ることがよくあります。病気の手—

バートスカルツォ: いいえ、続行します。

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

ロビン・ブロア: ええ、それは災害になります。つまり、あなたはただただ動き回っているだけだ。スラッシングは常に悪い。

とにかく、デズに引き継がれます。彼はいくつかの興味深い質問を受け取ったと確信しています。

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

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

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

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

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

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

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

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

バートスカルツォ: まさに。

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

バートスカルツォ: 理想的には、彼らは前もってそれを行うでしょうが、誰もがただ物事を成し遂げなければならないh騒の世界にいるので、彼らはより多くのCPUとメモリを追加することによって解決できないパフォーマンスの問題に遭遇するまでそれをしない傾向があります仮想マシンへ。

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

バートスカルツォ: まさに、これをクラウドで実行できます。

デズ・ブランフィールド: 素晴らしい、私はそれが私たちの新しい勇敢な世界が行くところの一種だと思う。エリック。私は今あなたに戻って、ここでいくつか質問があり、1時間過ぎても参加者が私たちと一緒にいることを確認します。

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

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

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

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